Author: jjamrich
Date: 2011-08-18 16:31:01 -0400 (Thu, 18 Aug 2011)
New Revision: 22662
Added:
modules/tests/metamer/trunk/application/src/main/webapp/components/richAutocomplete/fetchValueAttr.xhtml
Modified:
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/bean/rich/RichAutocompleteBean.java
modules/tests/metamer/trunk/application/src/main/webapp/components/richAutocomplete/jsr303.xhtml
modules/tests/metamer/trunk/application/src/main/webapp/components/richAutocomplete/list.xhtml
Log:
RFPL-1421 and RFPL-1601: add @fetchValue attr for autocomplete, and add suggestions for
jsr303 validations
Modified:
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/bean/rich/RichAutocompleteBean.java
===================================================================
---
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/bean/rich/RichAutocompleteBean.java 2011-08-18
14:38:05 UTC (rev 22661)
+++
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/bean/rich/RichAutocompleteBean.java 2011-08-18
20:31:01 UTC (rev 22662)
@@ -83,6 +83,14 @@
ajaxAttributes = Attributes.getEmptyAttributes(getClass());
ajaxAttributes.setAttribute("render", "output");
ajaxAttributes.setAttribute("execute", "autocomplete");
+
+ attributes.remove("var"); // this attr is supposed to be used with
@fetchValue, and cannot be changed
+
+ // since this bean is session scoped, valueX should be reset explicitly
+ value1 = null;
+ value2 = null;
+ value3 = null;
+ value4 = null;
}
public Attributes getAttributes() {
@@ -119,6 +127,35 @@
}
return result;
}
+
+ /**
+ * Since @fetchValue introduced to rich:autocomplete component,
+ * there is possible to serve objects instead of simple string,
+ * and provide more flexible UI
+ *
+ * With @fetchValue is possible display additional information,
+ * even the letters typed into autocomplete input are different
+ * @param prefix
+ * @return List<Capital> with matching prefix
+ */
+ public List<Capital> autocompleteCapital(String prefix) {
+ ArrayList<Capital> result = new ArrayList<Capital>();
+ if (prefix != null && prefix.length() > 0) {
+ Iterator<Capital> iterator = capitals.iterator();
+ while (iterator.hasNext()) {
+ Capital elem = ((Capital) iterator.next());
+ if ((elem.getState() != null &&
elem.getState().toLowerCase().indexOf(prefix.toLowerCase()) == 0)
+ || "".equals(prefix)) {
+ result.add(elem);
+ }
+ }
+ } else {
+ for (Capital capital : capitals) {
+ result.add(capital);
+ }
+ }
+ return result;
+ }
public void setCapitals(List<Capital> capitals) {
this.capitals = capitals;
Added:
modules/tests/metamer/trunk/application/src/main/webapp/components/richAutocomplete/fetchValueAttr.xhtml
===================================================================
---
modules/tests/metamer/trunk/application/src/main/webapp/components/richAutocomplete/fetchValueAttr.xhtml
(rev 0)
+++
modules/tests/metamer/trunk/application/src/main/webapp/components/richAutocomplete/fetchValueAttr.xhtml 2011-08-18
20:31:01 UTC (rev 22662)
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
+
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:metamer="http://java.sun.com/jsf/composite/metamer"
+
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j">
+
+ <!--
+JBoss, Home of Professional Open Source
+Copyright 2010-2011, Red Hat, Inc. and individual contributors
+by the @authors tag. See the copyright.txt in the distribution for a
+full listing of individual contributors.
+
+This is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License as
+published by the Free Software Foundation; either version 2.1 of
+the License, or (at your option) any later version.
+
+This software is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this software; if not, write to the Free
+Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ -->
+
+ <ui:composition template="/templates/template.xhtml">
+
+ <ui:define name="view">
+ <f:metadata>
+ <f:viewParam name="templates"
value="#{templateBean.templates}">
+ <f:converter converterId="templatesListConverter" />
+ </f:viewParam>
+ </f:metadata>
+ </ui:define>
+
+ <ui:define name="component">
+ <rich:autocomplete id="autocomplete"
+
autofill="#{richAutocompleteBean.attributes['autofill'].value}"
+
autocompleteMethod="#{richAutocompleteBean.autocompleteCapital}"
+
clientFilterFunction="#{richAutocompleteBean.attributes['clientFilterFunction'].value}"
+
converterMessage="#{richAutocompleteBean.attributes['converterMessage'].value}"
+
disabled="#{richAutocompleteBean.attributes['disabled'].value}"
+
filterFunction="#{richAutocompleteBean.attributes['filterFunction'].value}"
+ fetchValue="#{capital.state}"
+
immediate="#{richAutocompleteBean.attributes['immediate'].value}"
+
inputClass="#{richAutocompleteBean.attributes['inputClass'].value}"
+
layout="#{richAutocompleteBean.attributes['layout'].value}"
+
minChars="#{richAutocompleteBean.attributes['minChars'].value}"
+
mode="#{richAutocompleteBean.attributes['mode'].value}"
+
onbeforedomupdate="#{richAutocompleteBean.attributes['onbeforedomupdate'].value}"
+
onbegin="#{richAutocompleteBean.attributes['onbegin'].value}"
+
onblur="#{richAutocompleteBean.attributes['onblur'].value}"
+
onchange="#{richAutocompleteBean.attributes['onchange'].value}"
+
onclick="#{richAutocompleteBean.attributes['onclick'].value}"
+
oncomplete="#{richAutocompleteBean.attributes['oncomplete'].value}"
+
ondblclick="#{richAutocompleteBean.attributes['ondblclick'].value}"
+
onerror="#{richAutocompleteBean.attributes['onerror'].value}"
+
onfocus="#{richAutocompleteBean.attributes['onfocus'].value}"
+
onkeydown="#{richAutocompleteBean.attributes['onkeydown'].value}"
+
onkeypress="#{richAutocompleteBean.attributes['onkeypress'].value}"
+
onkeyup="#{richAutocompleteBean.attributes['onkeyup'].value}"
+
onlistclick="#{richAutocompleteBean.attributes['onlistclick'].value}"
+
onlistdblclick="#{richAutocompleteBean.attributes['onlistdblclick'].value}"
+
onlistkeydown="#{richAutocompleteBean.attributes['onlistkeydown'].value}"
+
onlistkeypress="#{richAutocompleteBean.attributes['onlistkeypress'].value}"
+
onlistkeyup="#{richAutocompleteBean.attributes['onlistkeyup'].value}"
+
onlistmousedown="#{richAutocompleteBean.attributes['onlistmousedown'].value}"
+
onlistmousemove="#{richAutocompleteBean.attributes['onlistmousemove'].value}"
+
onlistmouseout="#{richAutocompleteBean.attributes['onlistmouseout'].value}"
+
onlistmouseover="#{richAutocompleteBean.attributes['onlistmouseover'].value}"
+
onlistmouseup="#{richAutocompleteBean.attributes['onlistmouseup'].value}"
+
onmousedown="#{richAutocompleteBean.attributes['onmousedown'].value}"
+
onmousemove="#{richAutocompleteBean.attributes['onmousemove'].value}"
+
onmouseout="#{richAutocompleteBean.attributes['onmouseout'].value}"
+
onmouseover="#{richAutocompleteBean.attributes['onmouseover'].value}"
+
onmouseup="#{richAutocompleteBean.attributes['onmouseup'].value}"
+
onselectitem="#{richAutocompleteBean.attributes['onselectitem'].value}"
+
popupClass="#{richAutocompleteBean.attributes['popupClass'].value}"
+
rendered="#{richAutocompleteBean.attributes['rendered'].value}"
+
required="#{richAutocompleteBean.attributes['required'].value}"
+
requiredMessage="#{richAutocompleteBean.attributes['requiredMessage'].value}"
+
selectFirst="#{richAutocompleteBean.attributes['selectFirst'].value}"
+
selectedItemClass="#{richAutocompleteBean.attributes['selectedItemClass'].value}"
+
showButton="#{richAutocompleteBean.attributes['showButton'].value}"
+
tokens="#{richAutocompleteBean.attributes['tokens'].value}"
+
validatorMessage="#{richAutocompleteBean.attributes['validatorMessage'].value}"
+
value="#{richAutocompleteBean.attributes['value'].value}"
+
valueChangeListener="#{richBean.valueChangeListener}"
+ var="capital"
+ >
+
+ <rich:column>
+ <h:outputText value="#{capital.state}" />
+ </rich:column>
+ <rich:column>
+ [<h:outputText value="#{capital.name}" />]
+ </rich:column>
+
+ <a4j:ajax event="change"
+
render="#{richAutocompleteBean.ajaxAttributes['render'].value}"
+
execute="#{richAutocompleteBean.ajaxAttributes['execute'].value}"
+ listener="#{richBean.changeEventListener}" />
+
+ <a4j:ajax event="selectitem" render="output"
+ listener="#{richBean.actionListener}"
+ />
+
+ </rich:autocomplete>
+
+ <br/><br/>
+ Your selection: <h:outputText id="output"
value="#{richAutocompleteBean.attributes['value'].value}"/>
+
+ </ui:define>
+
+ <ui:define name="outOfTemplateAfter">
+ <metamer:attributes value="#{richAutocompleteBean.attributes}"
id="attributes" />
+ <metamer:attributes
value="#{richAutocompleteBean.ajaxAttributes}" id="ajaxAttributes"
/>
+ </ui:define>
+
+ </ui:composition>
+</html>
Modified:
modules/tests/metamer/trunk/application/src/main/webapp/components/richAutocomplete/jsr303.xhtml
===================================================================
---
modules/tests/metamer/trunk/application/src/main/webapp/components/richAutocomplete/jsr303.xhtml 2011-08-18
14:38:05 UTC (rev 22661)
+++
modules/tests/metamer/trunk/application/src/main/webapp/components/richAutocomplete/jsr303.xhtml 2011-08-18
20:31:01 UTC (rev 22662)
@@ -42,14 +42,17 @@
<h:panelGrid columns="3">
not empty
- <rich:autocomplete id="input1"
value="#{richAutocompleteBean.value1}" >
+ <rich:autocomplete id="input1"
+
autocompleteMethod="#{richAutocompleteBean.autocomplete}"
+ value="#{richAutocompleteBean.value1}"
+ >
<a4j:ajax event="change"
render="output1"/>
</rich:autocomplete>
<rich:message id="inputMsg1" for="input1"/>
pattern [a-z].*
<rich:autocomplete id="input2"
-
defaultLabel="#{richAutocompleteBean.attributes['defaultLabel'].value}"
+
autocompleteMethod="#{richAutocompleteBean.autocomplete}"
value="#{richAutocompleteBean.value2}"
<a4j:ajax event="change"
render="output2"/>
@@ -58,7 +61,7 @@
size 3-6
<rich:autocomplete id="input3"
-
defaultLabel="#{richAutocompleteBean.attributes['defaultLabel'].value}"
+
autocompleteMethod="#{richAutocompleteBean.autocomplete}"
value="#{richAutocompleteBean.value3}"
<a4j:ajax event="change"
render="output3"/>
@@ -66,9 +69,8 @@
<rich:message id="inputMsg3" for="input3"/>
custom (RichFaces)
- <rich:autocomplete id="input4"
-
defaultLabel="#{richAutocompleteBean.attributes['defaultLabel'].value}"
- value="#{richAutocompleteBean.value4}"
+ <rich:autocomplete id="input4"
+ value="#{richAutocompleteBean.value4}"
<f:validator
validatorId="org.richfaces.StringRichFacesValidator"/>
<a4j:ajax event="change"
render="output4"/>
Modified:
modules/tests/metamer/trunk/application/src/main/webapp/components/richAutocomplete/list.xhtml
===================================================================
---
modules/tests/metamer/trunk/application/src/main/webapp/components/richAutocomplete/list.xhtml 2011-08-18
14:38:05 UTC (rev 22661)
+++
modules/tests/metamer/trunk/application/src/main/webapp/components/richAutocomplete/list.xhtml 2011-08-18
20:31:01 UTC (rev 22662)
@@ -36,6 +36,10 @@
input boxes for all its attributes.
</metamer:testPageLink>
+ <metamer:testPageLink id="fetchValueAttr"
outcome="fetchValueAttr" value="Formatted suggestions">
+ Simple page that contains <b>rich:autocomplete</b> with
example of use @fetchValue (suggestions formatting)
+ </metamer:testPageLink>
+
<metamer:testPageLink id="jsr303" outcome="jsr303"
value="JSR-303 Bean Validation">
Simple page that contains some <b>rich:autocomplete</b>s with
various JSR-303 validators.
</metamer:testPageLink>