JBoss Rich Faces SVN: r14075 - trunk/docs/realworld_app_guide/en/src/main/docbook/includes.
by richfaces-svn-commits@lists.jboss.org
Author: msorokin
Date: 2009-05-07 13:35:57 -0400 (Thu, 07 May 2009)
New Revision: 14075
Added:
trunk/docs/realworld_app_guide/en/src/main/docbook/includes/button.xml
trunk/docs/realworld_app_guide/en/src/main/docbook/includes/datascroller.xml
Modified:
trunk/docs/realworld_app_guide/en/src/main/docbook/includes/validators.xml
Log:
added button and datascroller chapters
https://jira.jboss.org/jira/browse/RF-5768
Added: trunk/docs/realworld_app_guide/en/src/main/docbook/includes/button.xml
===================================================================
--- trunk/docs/realworld_app_guide/en/src/main/docbook/includes/button.xml (rev 0)
+++ trunk/docs/realworld_app_guide/en/src/main/docbook/includes/button.xml 2009-05-07 17:35:57 UTC (rev 14075)
@@ -0,0 +1,307 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section id="Button">
+ <title>How the button is created and how it acts
+ </title>
+ <para>
+
+ Due to specific design of the buttons in the Photo Album application, it's necessary to clarify some design and development points about the button. The button is visually represented by Facelets template stored in the <property>button.xhtml</property> file.
+
+ </para>
+ <para>Please have a look at the content of the file:
+ </para>
+ <programlisting role="XML"><![CDATA[...
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:s="http://jboss.com/products/seam/taglib" xmlns:c="http://java.sun.com/jstl/core"
+ xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://richfaces.org/rich"
+ xmlns:a4j="http://richfaces.org/a4j" xmlns:richx="http://richfaces.org/richx">
+ <a4j:loadScript src="/scripts/buttons.js" />
+ <richx:actionMapper>
+ <a4j:outputPanel layout="block" style="#{style}"
+ styleClass="photoalbumButton #{styleClass}" lang="#{lang}" dir="#{dir}"
+ title="#{title}" rendered="#{empty rendered or rendered}"
+ onmousedown="RF_RW_DEMO.toPressed(this)" onmouseup="RF_RW_DEMO.toReleased(this)"
+ onmouseout="RF_RW_DEMO.toReleased(this)">
+
+ <h:graphicImage value="/img/shell/button.png" alt="" />
+ <h:graphicImage value="/img/shell/button_press.png"
+ style="display: none;" alt="" />
+
+ <div>#{value}</div>
+
+ <a4j:commandButton accesskey="#{accesskey}"
+ ajaxSingle="#{ajaxSingle}" alt="#{alt}" type="image" image="/img/shell/spacer.gif"
+ actionListener="#{mappedActionListener}" action="#{mappedAction}"
+ bypassUpdates="#{bypassUpdates}" data="#{data}" disabled="#{disabled}"
+ eventsQueue="#{eventsQueue}" focus="#{focus}" ignoreDupResponses="#{ignoreDupResponses}"
+ immediate="#{immediate}" limitToList="#{limitToList}"
+ onbeforedomupdate="#{onbeforedomupdate}" timeout="#{timeout}"
+ tabindex="#{tabindex}" status="#{status}" similarityGroupingId="#{similarityGroupingId}"
+ reRender="#{reRender}" requestDelay="#{requestDelay}" process="#{process}"
+ oncomplete="#{oncomplete}" onblur="#{onblur}" onclick="#{onclick}"
+ ondblclick="#{ondblclick}" onfocus="#{onfocus}" onkeydown="#{onkeydown}"
+ onkeypress="#{onkeypress}" onkeyup="#{onkeyup}" onmousedown="#{onmousedown}"
+ onmousemove="#{onmousemove}" onmouseout="#{onmouseout}" onmouseover="#{onmouseover}"
+ onmouseup="#{onmouseup}" />
+
+ </a4j:outputPanel>
+ </richx:actionMapper>
+
+</ui:composition>
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:s="http://jboss.com/products/seam/taglib" xmlns:c="http://java.sun.com/jstl/core"
+ xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://richfaces.org/rich"
+ xmlns:a4j="http://richfaces.org/a4j" xmlns:richx="http://richfaces.org/richx">
+ <a4j:loadScript src="/scripts/buttons.js" />
+ <richx:actionMapper>
+ <a4j:outputPanel layout="block" style="#{style}"
+ styleClass="photoalbumButton #{styleClass}" lang="#{lang}" dir="#{dir}"
+ title="#{title}" rendered="#{empty rendered or rendered}"
+ onmousedown="RF_RW_DEMO.toPressed(this)" onmouseup="RF_RW_DEMO.toReleased(this)"
+ onmouseout="RF_RW_DEMO.toReleased(this)">
+
+ <h:graphicImage value="/img/shell/button.png" alt="" />
+ <h:graphicImage value="/img/shell/button_press.png"
+ style="display: none;" alt="" />
+
+ <div>#{value}</div>
+
+ <a4j:commandButton accesskey="#{accesskey}"
+ ajaxSingle="#{ajaxSingle}" alt="#{alt}" type="image" image="/img/shell/spacer.gif"
+ actionListener="#{mappedActionListener}" action="#{mappedAction}"
+ bypassUpdates="#{bypassUpdates}" data="#{data}" disabled="#{disabled}"
+ eventsQueue="#{eventsQueue}" focus="#{focus}" ignoreDupResponses="#{ignoreDupResponses}"
+ immediate="#{immediate}" limitToList="#{limitToList}"
+ onbeforedomupdate="#{onbeforedomupdate}" timeout="#{timeout}"
+ tabindex="#{tabindex}" status="#{status}" similarityGroupingId="#{similarityGroupingId}"
+ reRender="#{reRender}" requestDelay="#{requestDelay}" process="#{process}"
+ oncomplete="#{oncomplete}" onblur="#{onblur}" onclick="#{onclick}"
+ ondblclick="#{ondblclick}" onfocus="#{onfocus}" onkeydown="#{onkeydown}"
+ onkeypress="#{onkeypress}" onkeyup="#{onkeyup}" onmousedown="#{onmousedown}"
+ onmousemove="#{onmousemove}" onmouseout="#{onmouseout}" onmouseover="#{onmouseover}"
+ onmouseup="#{onmouseup}" />
+
+ </a4j:outputPanel>
+ </richx:actionMapper>
+
+</ui:composition><ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:s="http://jboss.com/products/seam/taglib" xmlns:c="http://java.sun.com/jstl/core"
+ xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://richfaces.org/rich"
+ xmlns:a4j="http://richfaces.org/a4j" xmlns:richx="http://richfaces.org/richx">
+ <a4j:loadScript src="/scripts/buttons.js" />
+ <richx:actionMapper>
+ <a4j:outputPanel layout="block" style="#{style}"
+ styleClass="photoalbumButton #{styleClass}" lang="#{lang}" dir="#{dir}"
+ title="#{title}" rendered="#{empty rendered or rendered}"
+ onmousedown="RF_RW_DEMO.toPressed(this)" onmouseup="RF_RW_DEMO.toReleased(this)"
+ onmouseout="RF_RW_DEMO.toReleased(this)">
+
+ <h:graphicImage value="/img/shell/button.png" alt="" />
+ <h:graphicImage value="/img/shell/button_press.png"
+ style="display: none;" alt="" />
+
+ <div>#{value}</div>
+
+ <a4j:commandButton accesskey="#{accesskey}"
+ ajaxSingle="#{ajaxSingle}" alt="#{alt}" type="image" image="/img/shell/spacer.gif"
+ actionListener="#{mappedActionListener}" action="#{mappedAction}"
+ bypassUpdates="#{bypassUpdates}" data="#{data}" disabled="#{disabled}"
+ eventsQueue="#{eventsQueue}" focus="#{focus}" ignoreDupResponses="#{ignoreDupResponses}"
+ immediate="#{immediate}" limitToList="#{limitToList}"
+ onbeforedomupdate="#{onbeforedomupdate}" timeout="#{timeout}"
+ tabindex="#{tabindex}" status="#{status}" similarityGroupingId="#{similarityGroupingId}"
+ reRender="#{reRender}" requestDelay="#{requestDelay}" process="#{process}"
+ oncomplete="#{oncomplete}" onblur="#{onblur}" onclick="#{onclick}"
+ ondblclick="#{ondblclick}" onfocus="#{onfocus}" onkeydown="#{onkeydown}"
+ onkeypress="#{onkeypress}" onkeyup="#{onkeyup}" onmousedown="#{onmousedown}"
+ onmousemove="#{onmousemove}" onmouseout="#{onmouseout}" onmouseover="#{onmouseover}"
+ onmouseup="#{onmouseup}" />
+
+ </a4j:outputPanel>
+ </richx:actionMapper>
+
+</ui:composition>
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:s="http://jboss.com/products/seam/taglib" xmlns:c="http://java.sun.com/jstl/core"
+ xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://richfaces.org/rich"
+ xmlns:a4j="http://richfaces.org/a4j" xmlns:richx="http://richfaces.org/richx">
+ <a4j:loadScript src="/scripts/buttons.js" />
+ <richx:actionMapper>
+ <a4j:outputPanel layout="block" style="#{style}"
+ styleClass="photoalbumButton #{styleClass}" lang="#{lang}" dir="#{dir}"
+ title="#{title}" rendered="#{empty rendered or rendered}"
+ onmousedown="RF_RW_DEMO.toPressed(this)" onmouseup="RF_RW_DEMO.toReleased(this)"
+ onmouseout="RF_RW_DEMO.toReleased(this)">
+
+ <h:graphicImage value="/img/shell/button.png" alt="" />
+ <h:graphicImage value="/img/shell/button_press.png"
+ style="display: none;" alt="" />
+
+ <div>#{value}</div>
+
+ <a4j:commandButton accesskey="#{accesskey}"
+ ajaxSingle="#{ajaxSingle}" alt="#{alt}" type="image" image="/img/shell/spacer.gif"
+ actionListener="#{mappedActionListener}" action="#{mappedAction}"
+ bypassUpdates="#{bypassUpdates}" data="#{data}" disabled="#{disabled}"
+ eventsQueue="#{eventsQueue}" focus="#{focus}" ignoreDupResponses="#{ignoreDupResponses}"
+ immediate="#{immediate}" limitToList="#{limitToList}"
+ onbeforedomupdate="#{onbeforedomupdate}" timeout="#{timeout}"
+ tabindex="#{tabindex}" status="#{status}" similarityGroupingId="#{similarityGroupingId}"
+ reRender="#{reRender}" requestDelay="#{requestDelay}" process="#{process}"
+ oncomplete="#{oncomplete}" onblur="#{onblur}" onclick="#{onclick}"
+ ondblclick="#{ondblclick}" onfocus="#{onfocus}" onkeydown="#{onkeydown}"
+ onkeypress="#{onkeypress}" onkeyup="#{onkeyup}" onmousedown="#{onmousedown}"
+ onmousemove="#{onmousemove}" onmouseout="#{onmouseout}" onmouseover="#{onmouseover}"
+ onmouseup="#{onmouseup}" />
+
+ </a4j:outputPanel>
+ </richx:actionMapper>
+
+</ui:composition>
+...]]></programlisting>
+ <para>
+ The <emphasis role="bold"> <property><richx:actionMapper></property></emphasis>
+ tag is covered in more detail further in the text. In brief, it's a special tag developed deliberately to pass to the button a method expression of the action which must be performed when the button is clicked.
+
+ </para>
+ <para>
+ To make sure the button works correctly we include the required JavaScript code that is located in the button.js file using <code> <a4j:loadScript src="/scripts/buttons.js" /> </code> component.
+ </para>
+ <para>
+ The button consists of several parts:
+ </para>
+ <itemizedlist>
+ <listitem><para>2 images (pressed and not pressed)</para></listitem>
+ <listitem><para><div> element that displays the button's text </para></listitem>
+ <listitem><para><emphasis role="bold"><property><a4j:commandButton></property></emphasis> that sends Ajax request to the server</para></listitem>
+
+ </itemizedlist>
+ <para>
+ These elements are wrapped by <emphasis role="bold"><property><a4j:outputPanel></property></emphasis> to adjust the look-and-feel.
+ </para>
+ <para>
+ In the application the button is used for example like this:
+ </para>
+ <programlisting role="XML"><![CDATA[...
+<richx:commandButton actionListener="#{authenticator.register(user)}" reRender="mainform, headerPanel" value="#{messages['user.register']}" />
+...]]></programlisting>
+ <para>
+ We can pass to the <emphasis role="bold"><property><richx:commandButton></property></emphasis> all required attributes, in the example only actionListener, reRender and value are passed.
+ </para>
+ <para>
+ <emphasis role="bold"><property><richx:commandButton></property></emphasis>
+ is a custom tag that is declared in the photoalbum-taglib.xml tag library:
+ </para>
+ <programlisting role="XML"><![CDATA[...
+<?xml version="1.0"?>
+<!DOCTYPE facelet-taglib PUBLIC
+ "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
+ "facelet-taglib_1_0.dtd">
+<facelet-taglib>
+ <namespace>http://richfaces.org/richx</namespace>
+ <tag>
+ <tag-name>commandButton</tag-name>
+ <source>templates/button.xhtml</source>
+ </tag>
+ <tag>
+ <tag-name>actionMapper</tag-name>
+ <handler-class>org.richfaces.photoalbum.util.ActionMapperTagHandler</handler-class>
+ </tag>
+</facelet-taglib>
+...]]></programlisting>
+ <para>
+ In order to use the <emphasis role="bold"><property><richx:commandButton></property></emphasis> on the page the namespace of the taglib must be declared:
+ </para>
+ <programlisting role="XML"><![CDATA[...
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ ...
+xmlns:richx="http://richfaces.org/richx">
+...]]></programlisting>
+ <para>
+ A more complex part of the button implementation, as we said earlier, is <emphasis role="bold"><property><richx:actionMapper></property></emphasis> which is also described in tablib. But it is not just a simple tag-template since it has Facelets handler-class which specifies how it is handled when declared on the page. It is created because Facelets templates do not allow to make the MethodExpression a Facelets-template parameter. Please find below the code of the class(some irrelevant details are omitted):
+ </para>
+ <programlisting role="JAVA"><![CDATA[...
+ public class ActionMapperTagHandler extends TagHandler {
+
+ private static final Class<?>[] ACTION_PARAM_TYPES = new Class[0];
+
+ private static final Class<?>[] ACTION_LISTENER_PARAM_TYPES = new Class[] {ActionEvent.class};
+
+ private static final String ACTION = "action";
+
+ private static final String ACTION_LISTENER = "actionListener";
+
+ private static final String MAPPED_ACTION = "mappedAction";
+
+ private static final String MAPPED_ACTION_LISTENER = "mappedActionListener";
+
+ public ActionMapperTagHandler(TagConfig config) {
+ super(config);
+ }
+
+ private MethodExpression remap(FaceletContext faceletContext, String varName,
+ Class<?> expectedReturnType, Class<?>[] expectedParamTypes) {
+
+ MethodExpression result = null;
+
+ VariableMapper mapper = faceletContext.getVariableMapper();
+ ValueExpression valueExpression = mapper.resolveVariable(varName);
+ if (valueExpression != null) {
+ ExpressionFactory ef = faceletContext.getExpressionFactory();
+ ELContext elContext = faceletContext.getFacesContext().getELContext();
+
+ result = ef.createMethodExpression(elContext, valueExpression.getExpressionString(),
+ expectedReturnType, expectedParamTypes);
+ }
+
+ return result;
+ }
+
+ public void apply(FaceletContext ctx, UIComponent parent)
+ throws IOException, FacesException, FaceletException, ELException {
+
+ MethodExpression actionExpression = remap(ctx, ACTION, String.class, ACTION_PARAM_TYPES);
+ MethodExpression actionListenerExpression = remap(ctx, ACTION_LISTENER, null, ACTION_LISTENER_PARAM_TYPES);
+
+ if (actionExpression != null || actionListenerExpression != null) {
+ VariableMapper initialVarMapper = ctx.getVariableMapper();
+ try {
+ VariableMapperWrapper varMapper = new VariableMapperWrapper(initialVarMapper);
+
+ if (actionExpression == null) {
+ actionExpression = NOOP_ACTION_EXPRESSION;
+ }
+
+ varMapper.setVariable(MAPPED_ACTION,
+ ctx.getExpressionFactory().createValueExpression(actionExpression,
+ MethodExpression.class));
+
+ if (actionListenerExpression == null) {
+ actionListenerExpression = NOOP_ACTION_LISTENER_EXPRESSION;
+ }
+
+ varMapper.setVariable(MAPPED_ACTION_LISTENER,
+ ctx.getExpressionFactory().createValueExpression(actionListenerExpression,
+ MethodExpression.class));
+
+ ctx.setVariableMapper(varMapper);
+
+ nextHandler.apply(ctx, parent);
+
+ } finally {
+ ctx.setVariableMapper(initialVarMapper);
+ }
+ } else {
+ nextHandler.apply(ctx, parent);
+ }
+ }
+}
+
+...]]></programlisting>
+ <para>
+ You can find more infromation about Facelets, custom tags, taglibs, Facelets tag handlers and Facelets templates here.
+ </para>
+</section>
Added: trunk/docs/realworld_app_guide/en/src/main/docbook/includes/datascroller.xml
===================================================================
--- trunk/docs/realworld_app_guide/en/src/main/docbook/includes/datascroller.xml (rev 0)
+++ trunk/docs/realworld_app_guide/en/src/main/docbook/includes/datascroller.xml 2009-05-07 17:35:57 UTC (rev 14075)
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section id="CustomDataScroller">
+ <title>Custom Data Scroller</title>
+ <para>
+ The custom data scroller implementation in the Photo Album application is basically <emphasis role="bold"><property><a4j:repeat></property></emphasis> with the value attribute bound to <code>#{model.selectedAlbum.images}</code>, which is a collection of images of the selected album and the <emphasis role="bold"><property><rich:dataScroller>></property></emphasis> component tied to the <emphasis role="bold"><property><a4j:repeat></property></emphasis> .
+ </para>
+
+ <para>
+ The source code you can find in the includes/images/imageScroller.xhtml file.
+ Now let's go deeper into the details. The main component here is <emphasis role="bold"><property><a4j:repeat></property></emphasis>:
+
+ </para>
+
+ <programlisting role="XML"><![CDATA[...
+<a4j:repeat value="#{model.selectedAlbum.images}" rows="5"
+ var="img" id="repeat" rowKeyVar="rk">
+
+ <a4j:outputPanel layout="block"
+ styleClass="preview_box_photo_nav #{model.selectedImage == img ? 'preview_box_photo_current' : 'preview_box_photo_default'}">
+ <h:panelGroup layout="block" styleClass="preview_box_photo_80">
+ <h:graphicImage styleClass="pr_photo_bg"
+ value="/img/shell/frame_photo_80.png" />
+ <h:panelGrid cellpadding="0" cellspacing="2">
+ <h:panelGroup layout="block">
+ <a4j:mediaOutput element="img"
+ createContent="#{imageLoader.paintImage}"
+ value="#{fileManager.transformPath(img.fullPath, '_small80')}">
+ </a4j:mediaOutput>
+ <br />
+ </h:panelGroup>
+ </h:panelGrid>
+ <h:panelGroup layout="block" styleClass="photo_name">
+ <h:outputText value="#{img.name}" />
+ </h:panelGroup>
+ <h:panelGroup layout="block" styleClass="photo_data">
+ <h:outputText value="#{rk + 1}" />
+ </h:panelGroup>
+ </h:panelGroup>
+
+ <a4j:support event="onclick" rendered="#{model.selectedImage != img}"
+ reRender="mainArea,treePanel, imagesTable" action="#{controller.showImage(img)}" />
+ </a4j:outputPanel>
+</a4j:repeat>
+...]]></programlisting>
+
+ <para>
+ Each element of the
+
+ <emphasis role="bold"><property><a4j:repeat></property></emphasis> has a corresponding <emphasis role="bold"><property><a4j:outputPanel></property></emphasis> with the <emphasis role="bold"><property><a4j:mediaOutput></property></emphasis> as a nested element. <emphasis role="bold"><property><a4j:mediaOutput></property></emphasis> renders the thumbnail of the image. As the rows attribute is set to "5" (<code>rows="5"</code>), only 5 images are displayed on the page at a time.
+
+ </para>
+
+ <para>
+ As you've noticed, the currently selected image in the data scroller has different style, namely: a red frame around thumbnail, which is implemented with this code:
+ </para>
+ <programlisting role="XML"><![CDATA[...
+<a4j:outputPanel layout="block"
+styleClass="preview_box_photo_nav #{model.selectedImage == img ? 'preview_box_photo_current' : 'preview_box_photo_default'}">
+...]]></programlisting>
+ <para>
+ As you can see from the code snippet,
+ identification of whether the currently selected image is the same image displayed by the <emphasis role="bold"><property><a4j:repeat></property></emphasis> is performed in the styleClass, if it returns "true", different style is applied.
+ </para>
+ <para>
+ Each <emphasis role="bold"><property><a4j:repeat></property></emphasis> has a corresponding <emphasis role="bold"><property><a4j:support></property></emphasis> configured like this:
+ </para>
+ <programlisting role="XML"><![CDATA[...
+ <a4j:support event="onclick"
+ rendered="#{model.selectedImage != img}"
+ reRender="mainArea,treePanel, imagesTable"
+ action="#{controller.showImage(img)}" />
+
+...]]></programlisting>
+
+ <para>
+ On every click <emphasis role="bold"><property><a4j:support></property></emphasis> calls <code> #{controller.showImage(img)}</code> method that sets the current image, thumbnail of which has just been clicked on. For more details please see Controller.java class.
+ </para>
+
+ <para>
+ To implement thumbnails scrolling effect the <emphasis role="bold"><property><rich:datascroller></property></emphasis> is attached to the <emphasis role="bold"><property><a4j:repeat></property></emphasis>:
+ </para>
+
+ <programlisting role="XML"><![CDATA[...
+<rich:datascroller page="#{controller.getPage()}"
+ styleClass="image-scroller" lastPageMode="full" for="repeat" reRender="imagesTable"
+ boundaryControls="hide" stepControls="hide">
+ <f:facet name="pages">
+ <h:outputText />
+ </f:facet>
+ <f:facet name="fastforward">
+ <h:graphicImage styleClass="image-scroller-right-arrow"
+ value="img/shell/arr_right.png" />
+ </f:facet>
+ <f:facet name="fastforward_disabled">
+ <h:graphicImage styleClass="image-scroller-right-arrow"
+ value="img/shell/arr_right_dis.png" />
+ </f:facet>
+ <f:facet name="fastrewind">
+ <h:graphicImage styleClass="image-scroller-left-arrow"
+ value="img/shell/arr_left.png" />
+ </f:facet>
+ <f:facet name="fastrewind_disabled">
+ <h:graphicImage styleClass="image-scroller-left-arrow"
+ value="img/shell/arr_left_dis.png" />
+ </f:facet>
+</rich:datascroller>
+
+...]]></programlisting>
+ <para>
+ The page attribute identifies which page should be displayed right now. For instance, if you have only 20 images and the current image has the 12<superscript>th</superscript> index in the collection, then the 3<superscript>rd</superscript> page will be displayed:
+
+ </para>
+ <programlisting role="XML"><![CDATA[...
+public Integer getPage(){
+ final Integer index = model.getSelectedAlbum().getIndex(model.getSelectedImage());
+ return index / 5 + 1;
+ }
+
+...]]></programlisting>
+
+ <para>
+ The <code>lastPageMode="full" </code> attribute ensures that 5 thumbnails are always shown on the page. If this attribute hadn't been configured like this, in case the 19th thumbnail out of 20 had been selected then only 2 last thumbnails would have been displayed.
+ </para>
+
+ <para>
+ As you can see, <emphasis role="bold"><property><rich:dataScroller></property></emphasis> has a slightly different look-and-feel, the trick is in the redefinition of <property>fastforward</property>, <property>fastforward_disabled</property>, <property>fastrewind</property> and <property>fastrewind_disabled</property> facets on which places we display our images. We didn't redefine other facets because they are not rendered to the page which is achieved with <code>boundaryControls="hide"</code> and <code>stepControls="hide</code> attributes of <emphasis role="bold"><property><rich:dataSroller></property></emphasis>.
+ </para>
+ <para>
+ To get more details about the <emphasis role="bold"><property><a4j:repeat></property></emphasis> and <emphasis role="bold"><property><rich:dataScroller></property></emphasis> components please visit <ulink url="http://livedemo.exadel.com/richfaces-demo/richfaces/dataTableScroller.js">Live Demo</ulink> web page and <ulink url="http://www.jboss.org/file-access/default/members/jbossrichfaces/freezone/..." >RichFaces Developer Guide</ulink>
+
+ </para>
+</section>
Modified: trunk/docs/realworld_app_guide/en/src/main/docbook/includes/validators.xml
===================================================================
--- trunk/docs/realworld_app_guide/en/src/main/docbook/includes/validators.xml 2009-05-07 17:35:08 UTC (rev 14074)
+++ trunk/docs/realworld_app_guide/en/src/main/docbook/includes/validators.xml 2009-05-07 17:35:57 UTC (rev 14075)
@@ -3,9 +3,9 @@
<title>User Input Data Validation</title>
<para>
Validation of user input is a very frequent situation for a developer. RichFaces library offers 3 component to get this job done:
- <emphasis role="bold"><property><rich:beanValidator/></property></emphasis>, <emphasis role="bold"><property><rich:graphValidator/></property></emphasis>,
+ <emphasis role="bold"><property><rich:beanValidator></property></emphasis>, <emphasis role="bold"><property><rich:graphValidator></property></emphasis>,
- and <emphasis role="bold"><property><rich:ajaxValidator/></property></emphasis>. The latter two components are used in the Photo Album application. <emphasis role="bold"><property><rich:graphValidator/></property></emphasis> is intended to validate the whole object or the graph of interrelated objects and the validation occurs when the whole form is submitted. While <emphasis role="bold"><property><rich:ajaxValidator/></property></emphasis> validates only one input field or a value at a time, validation is activated upon some event and adds interactivity to the application.
+ and <emphasis role="bold"><property><rich:ajaxValidator></property></emphasis>. The latter two components are used in the Photo Album application. <emphasis role="bold"><property><rich:graphValidator></property></emphasis> is intended to validate the whole object or the graph of interrelated objects and the validation occurs when the whole form is submitted. While <emphasis role="bold"><property><rich:ajaxValidator></property></emphasis> validates only one input field or a value at a time, validation is activated upon some event and adds interactivity to the application.
Both components use Hibernate validators which helps to locate validation logic in one place, such approach is really helpful given that usually data validation logic is stored in multiple places including UI pages and in Java code that interacts with a database.
</para>
<para>
@@ -54,16 +54,16 @@
<para>
- <emphasis role="bold"><property><rich:graphValidator/></property></emphasis> validates the entity User object, in which restrictions are set with the help of Hibernate annotations.
+ <emphasis role="bold"><property><rich:graphValidator></property></emphasis> validates the entity User object, in which restrictions are set with the help of Hibernate annotations.
When the <emphasis role="bold" >Register</emphasis> button is clicked on the <property>name, password, sex</property> etc. fields are validated sequentially. In case of an error (for example, if a <property>loginName</property> contains only on character and the annotation restricts it to at least 3 characters to be typed in) a error message in red color is displayed next to the input field and the request is aborted. If all values are valid the <code>authenticator.register(user)</code> method will be invoked and the user will be saved to the database.
</para>
<para>
- <emphasis role="bold"><property><rich:ajaxValidator/></property></emphasis> acts in a slightly different way, in our case it is attached to the <code>user.birthDate</code> field. When the value of the field is changed and the field loses focus it is immediately validated. If the input data is incorrect and error message will displayed, which is a quick way to respond to user input errors and avoid sending incorrect data to the server.
+ <emphasis role="bold"><property><rich:ajaxValidator></property></emphasis> acts in a slightly different way, in our case it is attached to the <code>user.birthDate</code> field. When the value of the field is changed and the field loses focus it is immediately validated. If the input data is incorrect and error message will displayed, which is a quick way to respond to user input errors and avoid sending incorrect data to the server.
</para>
<para>
- If you would like to get more details about the validators that RichFaces library provides please visit <link url="http://livedemo.exadel.com/richfaces-demo/richfaces/ajaxValidator.jsf">Live Demo</link> web page and <link url="http://www.jboss.org/file-access/default/members/jbossrichfaces/freezone/..." >RichFaces Developer Guide</link>.
+ If you would like to get more details about the validators that RichFaces library provides please visit <ulink url="http://livedemo.exadel.com/richfaces-demo/richfaces/ajaxValidator.jsf">Live Demo</ulink> web page and <ulink url="http://www.jboss.org/file-access/default/members/jbossrichfaces/freezone/..." >RichFaces Developer Guide</ulink>.
</para>
</section>
15 years, 7 months
JBoss Rich Faces SVN: r14074 - trunk/docs/realworld_app_guide/en/src/main/docbook.
by richfaces-svn-commits@lists.jboss.org
Author: msorokin
Date: 2009-05-07 13:35:08 -0400 (Thu, 07 May 2009)
New Revision: 14074
Modified:
trunk/docs/realworld_app_guide/en/src/main/docbook/master.xml
Log:
added button and datascroller chapters
https://jira.jboss.org/jira/browse/RF-5768
Modified: trunk/docs/realworld_app_guide/en/src/main/docbook/master.xml
===================================================================
--- trunk/docs/realworld_app_guide/en/src/main/docbook/master.xml 2009-05-07 17:30:18 UTC (rev 14073)
+++ trunk/docs/realworld_app_guide/en/src/main/docbook/master.xml 2009-05-07 17:35:08 UTC (rev 14074)
@@ -18,7 +18,10 @@
<!ENTITY contextMenu SYSTEM "includes/contextMenu.xml">
<!ENTITY tooltips SYSTEM "includes/tooltips.xml">
<!ENTITY hiw SYSTEM "includes/hiw.xml">
- <!ENTITY validators SYSTEM "includes/validators.xml">
+ <!ENTITY validators SYSTEM "includes/validators.xml">
+ <!ENTITY datascroller SYSTEM "includes/datascroller.xml">
+ <!ENTITY button SYSTEM "includes/button.xml">
+
]>
<book>
@@ -78,7 +81,9 @@
&uploadImages;
&contextMenu;
&tooltips;
- &validators;
+ &validators;
+ &datascroller;
+ &button;
<!-- &hiw; -->
&userPreferencesView;
&errorsReports;
15 years, 7 months
JBoss Rich Faces SVN: r14073 - trunk/ui/core/src/main/java/org/ajax4jsf/component.
by richfaces-svn-commits@lists.jboss.org
Author: alexsmirnov
Date: 2009-05-07 13:30:18 -0400 (Thu, 07 May 2009)
New Revision: 14073
Modified:
trunk/ui/core/src/main/java/org/ajax4jsf/component/UIInclude.java
Log:
revert https://jira.jboss.org/jira/browse/RF-6746 due to conflict with State manager API https://jira.jboss.org/jira/browse/RF-7051
Modified: trunk/ui/core/src/main/java/org/ajax4jsf/component/UIInclude.java
===================================================================
--- trunk/ui/core/src/main/java/org/ajax4jsf/component/UIInclude.java 2009-05-07 15:50:29 UTC (rev 14072)
+++ trunk/ui/core/src/main/java/org/ajax4jsf/component/UIInclude.java 2009-05-07 17:30:18 UTC (rev 14073)
@@ -208,13 +208,6 @@
restoreNavigation(context, holder);
}
- @Override
- public void encodeAll(FacesContext context) throws IOException {
- // Fix for https://jira.jboss.org/jira/browse/RF-6746
- ViewIdHolder holder = setupNavigation(context);
- super.encodeAll(context);
- restoreNavigation(context, holder);
- }
/*
* (non-Javadoc)
*
15 years, 7 months
JBoss Rich Faces SVN: r14072 - trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd.
by richfaces-svn-commits@lists.jboss.org
Author: abelevich
Date: 2009-05-07 11:50:29 -0400 (Thu, 07 May 2009)
New Revision: 14072
Modified:
trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/JarResourceScanner.java
Log:
Modified: trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/JarResourceScanner.java
===================================================================
--- trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/JarResourceScanner.java 2009-05-07 15:31:11 UTC (rev 14071)
+++ trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/JarResourceScanner.java 2009-05-07 15:50:29 UTC (rev 14072)
@@ -60,7 +60,7 @@
protected boolean isAcceptable(FileObject fileObject) {
for (int i = 0; i < patterns.length; i++) {
- if(SelectorUtils.matchPath(patterns[i], fileObject.getName().getPath())) {
+ if(SelectorUtils.matchPath(patterns[i], fileObject.getName().getURI())) {
return true;
}
}
15 years, 7 months
JBoss Rich Faces SVN: r14071 - trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/mojo.
by richfaces-svn-commits@lists.jboss.org
Author: abelevich
Date: 2009-05-07 11:31:11 -0400 (Thu, 07 May 2009)
New Revision: 14071
Modified:
trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/mojo/ResourceDependencyMojo.java
Log:
Modified: trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/mojo/ResourceDependencyMojo.java
===================================================================
--- trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/mojo/ResourceDependencyMojo.java 2009-05-07 15:24:22 UTC (rev 14070)
+++ trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/mojo/ResourceDependencyMojo.java 2009-05-07 15:31:11 UTC (rev 14071)
@@ -424,7 +424,7 @@
try {
FileSystemManager manager = VFS.getManager();
- jarFileObjects = manager.resolveFile("jar://" + file.toURI());
+ jarFileObjects = manager.resolveFile("jar:" + file.toURI());
} catch (FileSystemException e) {
getLog().error("Error during processing file: " + file.toURI()+ "\n" + e.getMessage(), e);
}
15 years, 7 months
JBoss Rich Faces SVN: r14070 - trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/mojo.
by richfaces-svn-commits@lists.jboss.org
Author: abelevich
Date: 2009-05-07 11:24:22 -0400 (Thu, 07 May 2009)
New Revision: 14070
Modified:
trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/mojo/ResourceDependencyMojo.java
Log:
Modified: trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/mojo/ResourceDependencyMojo.java
===================================================================
--- trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/mojo/ResourceDependencyMojo.java 2009-05-07 15:07:24 UTC (rev 14069)
+++ trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/mojo/ResourceDependencyMojo.java 2009-05-07 15:24:22 UTC (rev 14070)
@@ -38,7 +38,6 @@
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileSystemManager;
import org.apache.commons.vfs.VFS;
-import org.apache.commons.vfs.util.FileObjectUtils;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
@@ -413,12 +412,12 @@
try {
resolver.resolve(artifact, Collections.EMPTY_LIST, localRepository);
if(getLog().isDebugEnabled()) {
- getLog().debug("artifact " + artifact.getFile().getPath() + " is resolved");
+ getLog().debug("artifact " + artifact.getFile().toURI() + " is resolved");
}
} catch (ArtifactResolutionException e) {
getLog().error("Error with resolve artifact " + artifact.getFile().getPath() + "\n" + e.getMessage(), e);
} catch (ArtifactNotFoundException e) {
- getLog().error("Not found artifact " + artifact.getFile().getPath() + "\n" + e.getMessage(), e);
+ getLog().error("Not found artifact " + artifact.getFile().toURI() + "\n" + e.getMessage(), e);
}
File file = artifact.getFile();
@@ -427,7 +426,7 @@
FileSystemManager manager = VFS.getManager();
jarFileObjects = manager.resolveFile("jar://" + file.toURI());
} catch (FileSystemException e) {
- getLog().error("Error during processing file: " + file.getPath()+ "\n" + e.getMessage(), e);
+ getLog().error("Error during processing file: " + file.toURI()+ "\n" + e.getMessage(), e);
}
}
15 years, 7 months
JBoss Rich Faces SVN: r14069 - in trunk/examples/photoalbum/source/web/src/main: webapp/includes/image and 1 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: amarkhel
Date: 2009-05-07 11:07:24 -0400 (Thu, 07 May 2009)
New Revision: 14069
Modified:
trunk/examples/photoalbum/source/web/src/main/resources/messages_en.properties
trunk/examples/photoalbum/source/web/src/main/webapp/includes/image/imageList.xhtml
trunk/examples/photoalbum/source/web/src/main/webapp/includes/shelf/shelfInfo.xhtml
Log:
Modified: trunk/examples/photoalbum/source/web/src/main/resources/messages_en.properties
===================================================================
--- trunk/examples/photoalbum/source/web/src/main/resources/messages_en.properties 2009-05-07 14:56:16 UTC (rev 14068)
+++ trunk/examples/photoalbum/source/web/src/main/resources/messages_en.properties 2009-05-07 15:07:24 UTC (rev 14069)
@@ -223,8 +223,8 @@
contain=contain
pics_into=images into
new= new
-shelf.albums=albums
-images_=images
+shelf.albums=albums
+images_=images
tags=Tags
original_size=Original size
@@ -261,7 +261,7 @@
keywords=Keywords:
user_profile_=User profile
message_authorHeader=Author
-all_new_images=All new images
+all_new_images=All new images
in_album=in album
public_shelves=Pre-defined Shelves
all_images=All images
Modified: trunk/examples/photoalbum/source/web/src/main/webapp/includes/image/imageList.xhtml
===================================================================
(Binary files differ)
Modified: trunk/examples/photoalbum/source/web/src/main/webapp/includes/shelf/shelfInfo.xhtml
===================================================================
(Binary files differ)
15 years, 7 months
JBoss Rich Faces SVN: r14068 - in trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd: mojo and 1 other directory.
by richfaces-svn-commits@lists.jboss.org
Author: abelevich
Date: 2009-05-07 10:56:16 -0400 (Thu, 07 May 2009)
New Revision: 14068
Modified:
trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/handler/ComponentsHandler.java
trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/mojo/ResourceDependencyMojo.java
Log:
Modified: trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/handler/ComponentsHandler.java
===================================================================
--- trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/handler/ComponentsHandler.java 2009-05-07 14:48:29 UTC (rev 14067)
+++ trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/handler/ComponentsHandler.java 2009-05-07 14:56:16 UTC (rev 14068)
@@ -26,7 +26,6 @@
import java.util.Set;
import org.apache.maven.plugin.logging.Log;
-import org.apache.maven.plugin.logging.SystemStreamLog;
import org.codehaus.plexus.util.SelectorUtils;
import org.richfaces.cdk.rd.Component;
import org.richfaces.cdk.rd.Components;
@@ -145,8 +144,18 @@
if(!doMatch(styleExcludes, style, true)) {
this.styles.add(style);
log.info("style " + style + " is collected");
+ } else {
+ log.info("style files are in excluded list");
+ for(String styleExclude: styleExcludes) {
+ log.info(styleExclude);
+ }
}
+ } else {
+ log.info("style files are not in included list");
+ for(String styleInclude: styleIncludes) {
+ log.info(styleInclude);
+ }
}
}
@@ -190,10 +199,19 @@
if(!doMatch(scriptExcludes, script, true)) {
this.scripts.add(script);
log.info("script " + script + " is collected");
+ }else {
+ log.info("script files are in excluded list");
+ for(String styleExclude: scriptExcludes) {
+ log.info(styleExclude);
+ }
}
- }
-
+ } else {
+ log.info("script files are not in included list");
+ for(String styleInclude: scriptIncludes) {
+ log.info(styleInclude);
+ }
+ }
}
}
Modified: trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/mojo/ResourceDependencyMojo.java
===================================================================
--- trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/mojo/ResourceDependencyMojo.java 2009-05-07 14:48:29 UTC (rev 14067)
+++ trunk/cdk/maven-resource-dependency-plugin/src/main/java/org/richfaces/cdk/rd/mojo/ResourceDependencyMojo.java 2009-05-07 14:56:16 UTC (rev 14068)
@@ -38,6 +38,7 @@
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileSystemManager;
import org.apache.commons.vfs.VFS;
+import org.apache.commons.vfs.util.FileObjectUtils;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
@@ -245,7 +246,18 @@
for (Artifact artifact : artifacts) {
FileObject jar = resolveArtifact(artifact);
+ getLog().info("Process jar: " + jar.getName().getFriendlyURI());
FileObject [] configs = PluginUtils.resolveConfigsFromJar(jar, xmlConfigPatterns);
+
+ if(configs.length == 0) {
+ getLog().info("no dependecy files found");
+ } else {
+ getLog().info("next dependency files found");
+ for (FileObject config: configs) {
+ getLog().info(config.getName().getBaseName());
+ }
+ }
+
components.putAll(PluginUtils.processConfigs(configs, defaultDigester));
}
@@ -273,10 +285,9 @@
}
ScriptAssembler scriptAssembler = new ScriptAssembler(getLog());
-
- getLog().info("Start merge scripts to the: " + scriptFile.getPath());
-
+
if(!scripts.isEmpty()) {
+ getLog().info("Start merge scripts to the: " + scriptFile.getPath());
mergeResources(scriptFile,scriptAssembler, beforeScriptIncludes, afterScriptIncludes, scripts);
}
@@ -292,9 +303,9 @@
StyleAssembler styleAssembler = new StyleAssembler(getLog());
styleAssembler.setVelocityComponent(velocity);
- getLog().info("Start merge styles to the: " + styleFile.getPath());
-
+
if(!styles.isEmpty()) {
+ getLog().info("Start merge styles to the: " + styleFile.getPath());
mergeResources(styleFile,styleAssembler, beforeStyleIncludes, afterStyleIncludes, styles);
}
@@ -352,9 +363,14 @@
scanner.setIncludes(includes);
scanner.setExcludes(excludes);
scanner.addDefaultExcludes();
+ getLog().info("search *.xhtml files");
scanner.scan();
String [] collectedFiles = scanner.getIncludedFiles();
+
+ for(String collectedFile: collectedFiles) {
+ getLog().info(collectedFile + " found");
+ }
ComponentsHandler handler = new ComponentsHandler(getLog());
handler.setComponents(components);
@@ -406,10 +422,10 @@
}
File file = artifact.getFile();
-
+
try {
FileSystemManager manager = VFS.getManager();
- jarFileObjects = manager.resolveFile("jar:///" + file.getPath());
+ jarFileObjects = manager.resolveFile("jar://" + file.toURI());
} catch (FileSystemException e) {
getLog().error("Error during processing file: " + file.getPath()+ "\n" + e.getMessage(), e);
}
15 years, 7 months
JBoss Rich Faces SVN: r14067 - in trunk/examples/photoalbum/source/web/src/main: webapp/WEB-INF and 4 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: amarkhel
Date: 2009-05-07 10:48:29 -0400 (Thu, 07 May 2009)
New Revision: 14067
Modified:
trunk/examples/photoalbum/source/web/src/main/java/org/richfaces/photoalbum/manager/Authenticator.java
trunk/examples/photoalbum/source/web/src/main/webapp/WEB-INF/pages.xml
trunk/examples/photoalbum/source/web/src/main/webapp/includes/album/albumInfo.xhtml
trunk/examples/photoalbum/source/web/src/main/webapp/includes/image/imageInfo.xhtml
trunk/examples/photoalbum/source/web/src/main/webapp/includes/misc/errorPanel.xhtml
trunk/examples/photoalbum/source/web/src/main/webapp/includes/shelf/shelfInfo.xhtml
trunk/examples/photoalbum/source/web/src/main/webapp/includes/shelf/shelvesList.xhtml
Log:
Modified: trunk/examples/photoalbum/source/web/src/main/java/org/richfaces/photoalbum/manager/Authenticator.java
===================================================================
--- trunk/examples/photoalbum/source/web/src/main/java/org/richfaces/photoalbum/manager/Authenticator.java 2009-05-07 14:48:18 UTC (rev 14066)
+++ trunk/examples/photoalbum/source/web/src/main/java/org/richfaces/photoalbum/manager/Authenticator.java 2009-05-07 14:48:29 UTC (rev 14067)
@@ -73,13 +73,6 @@
private boolean conversationStarted = false;
- public boolean needStartConversation() {
- if (identity.isLoggedIn()) {
- setConversationStarted(true);
- }
- return user.getId() == null && !isConversationStarted();
- }
-
public boolean authenticate() {
try {
user = userAction.login(credentials.getUsername(), HashUtils
@@ -147,7 +140,7 @@
}
public void goToRegister() {
- Contexts.getSessionContext().set("user", new User());
+ user = new User();
Contexts.getConversationContext().set(Constants.AVATAR_DATA_COMPONENT,
null);
setLoginFailed(false);
Modified: trunk/examples/photoalbum/source/web/src/main/webapp/WEB-INF/pages.xml
===================================================================
--- trunk/examples/photoalbum/source/web/src/main/webapp/WEB-INF/pages.xml 2009-05-07 14:48:18 UTC (rev 14066)
+++ trunk/examples/photoalbum/source/web/src/main/webapp/WEB-INF/pages.xml 2009-05-07 14:48:29 UTC (rev 14067)
@@ -4,8 +4,8 @@
xsi:schemaLocation="http://jboss.com/products/seam/pages http://jboss.com/products/seam/pages-2.1.xsd">
<page view-id="/index.xhtml">
- <begin-conversation if="#{!conversation.longRunning and authenticator.needStartConversation()}"/>
- <action if="#{user.id == null and !authenticator.conversationStarted}" execute="#{authenticator.startConversation}"/>
+ <begin-conversation if="#{!conversation.longRunning}"/>
+ <action on-postback="false" if="#{!authenticator.conversationStarted}" execute="#{authenticator.startConversation}"/>
<navigation from-action="#{authenticator.logout}">
<rule if-outcome="logout">
<end-conversation />
Modified: trunk/examples/photoalbum/source/web/src/main/webapp/includes/album/albumInfo.xhtml
===================================================================
(Binary files differ)
Modified: trunk/examples/photoalbum/source/web/src/main/webapp/includes/image/imageInfo.xhtml
===================================================================
(Binary files differ)
Modified: trunk/examples/photoalbum/source/web/src/main/webapp/includes/misc/errorPanel.xhtml
===================================================================
(Binary files differ)
Modified: trunk/examples/photoalbum/source/web/src/main/webapp/includes/shelf/shelfInfo.xhtml
===================================================================
(Binary files differ)
Modified: trunk/examples/photoalbum/source/web/src/main/webapp/includes/shelf/shelvesList.xhtml
===================================================================
(Binary files differ)
15 years, 7 months
JBoss Rich Faces SVN: r14066 - trunk/examples/photoalbum/source/ejb/src/main/java/org/richfaces/photoalbum/domain.
by richfaces-svn-commits@lists.jboss.org
Author: amarkhel
Date: 2009-05-07 10:48:18 -0400 (Thu, 07 May 2009)
New Revision: 14066
Modified:
trunk/examples/photoalbum/source/ejb/src/main/java/org/richfaces/photoalbum/domain/Image.java
Log:
Modified: trunk/examples/photoalbum/source/ejb/src/main/java/org/richfaces/photoalbum/domain/Image.java
===================================================================
--- trunk/examples/photoalbum/source/ejb/src/main/java/org/richfaces/photoalbum/domain/Image.java 2009-05-07 14:28:03 UTC (rev 14065)
+++ trunk/examples/photoalbum/source/ejb/src/main/java/org/richfaces/photoalbum/domain/Image.java 2009-05-07 14:48:18 UTC (rev 14066)
@@ -116,7 +116,7 @@
@NotNull
@NotEmpty
- @Length(min = 3)
+ @Length(min = 3, max = 200)
@Column(length = 255, nullable = false)
private String name;
15 years, 7 months