You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2009/12/15 23:29:01 UTC

svn commit: r891039 - in /myfaces/tomahawk/trunk: core/src/main/java/org/apache/myfaces/custom/selectitems/ core12/src/main/java/org/apache/myfaces/custom/selectitems/ examples/simple/src/main/java/org/apache/myfaces/examples/selectitems/ examples/simp...

Author: lu4242
Date: Tue Dec 15 22:29:01 2009
New Revision: 891039

URL: http://svn.apache.org/viewvc?rev=891039&view=rev
Log:
TOMAHAWK-1403 t:selectItems behaviour with Map values is weird

Modified:
    myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/selectitems/AbstractUISelectItems.java
    myfaces/tomahawk/trunk/core12/src/main/java/org/apache/myfaces/custom/selectitems/AbstractUISelectItems.java
    myfaces/tomahawk/trunk/examples/simple/src/main/java/org/apache/myfaces/examples/selectitems/SelectItemsBean.java
    myfaces/tomahawk/trunk/examples/simple/src/main/webapp/selectItems.jsp

Modified: myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/selectitems/AbstractUISelectItems.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/selectitems/AbstractUISelectItems.java?rev=891039&r1=891038&r2=891039&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/selectitems/AbstractUISelectItems.java (original)
+++ myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/selectitems/AbstractUISelectItems.java Tue Dec 15 22:29:01 2009
@@ -69,13 +69,31 @@
      * @JSFProperty
      */
     public abstract Object getItemValue();
+
+    /**
+     * Only applies when value points to a map. Use the Entry instance instead
+     * the value for resolve EL Expressions
+     * 
+     * @since 1.1.10
+     * @JSFProperty
+     *    defaultValue = "false"
+     */
+    public abstract boolean isUseEntryAsItem();
     
     public Object getValue() {
         Object value = super.getValue();
-        return createSelectItems(value);
+        String var = getVar(); 
+        if (var != null && var.length() > 0)
+        {
+            return createSelectItems(value);
+        }
+        else
+        {
+            return value;
+        }
     }
 
-    private SelectItem[] createSelectItems(Object value) {
+    private Object createSelectItems(Object value) {
         List items = new ArrayList();
         
         if (value instanceof SelectItem[]) {
@@ -102,16 +120,29 @@
         }
         else if (value instanceof Map) {
             Map map = (Map) value;
-            for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) {
-                Entry currentItem = (Entry) iter.next();
-                putIteratorToRequestParam(currentItem.getValue());
-                SelectItem selectItem = createSelectItem();
-                removeIteratorFromRequestParam();
-                items.add(selectItem);
+            if (isUseEntryAsItem())
+            {
+                for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) {
+                    Entry currentItem = (Entry) iter.next();
+                    putIteratorToRequestParam(currentItem);
+                    SelectItem selectItem = createSelectItem();
+                    removeIteratorFromRequestParam();
+                    items.add(selectItem);
+                }
+            }
+            else
+            {
+                for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) {
+                    Entry currentItem = (Entry) iter.next();
+                    putIteratorToRequestParam(currentItem.getValue());
+                    SelectItem selectItem = createSelectItem();
+                    removeIteratorFromRequestParam();
+                    items.add(selectItem);
+                }
             }
         }
         
-        return (SelectItem[]) items.toArray(new SelectItem[0]);
+        return items.toArray(new SelectItem[0]);
     }
 
     private SelectItem createSelectItem() {

Modified: myfaces/tomahawk/trunk/core12/src/main/java/org/apache/myfaces/custom/selectitems/AbstractUISelectItems.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core12/src/main/java/org/apache/myfaces/custom/selectitems/AbstractUISelectItems.java?rev=891039&r1=891038&r2=891039&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core12/src/main/java/org/apache/myfaces/custom/selectitems/AbstractUISelectItems.java (original)
+++ myfaces/tomahawk/trunk/core12/src/main/java/org/apache/myfaces/custom/selectitems/AbstractUISelectItems.java Tue Dec 15 22:29:01 2009
@@ -94,9 +94,27 @@
      */
     public abstract Object getItemDisabled();
     
+    /**
+     * Only applies when value points to a map. Use the Entry instance instead
+     * the value for resolve EL Expressions
+     * 
+     * @since 1.1.10
+     * @JSFProperty
+     *    defaultValue = "false"
+     */
+    public abstract boolean isUseEntryAsItem();
+    
     public Object getValue() {
         Object value = super.getValue();
-        return createSelectItems(value);
+        String var = getVar(); 
+        if (var != null && var.length() > 0)
+        {
+            return createSelectItems(value);
+        }
+        else
+        {
+            return value;
+        }
     }
 
     private SelectItem[] createSelectItems(Object value) {
@@ -126,12 +144,25 @@
         }
         else if (value instanceof Map) {
             Map map = (Map) value;
-            for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) {
-                Entry currentItem = (Entry) iter.next();
-                putIteratorToRequestParam(currentItem.getValue());
-                SelectItem selectItem = createSelectItem();
-                removeIteratorFromRequestParam();
-                items.add(selectItem);
+            if (isUseEntryAsItem())
+            {
+                for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) {
+                    Entry currentItem = (Entry) iter.next();
+                    putIteratorToRequestParam(currentItem);
+                    SelectItem selectItem = createSelectItem();
+                    removeIteratorFromRequestParam();
+                    items.add(selectItem);
+                }
+            }
+            else
+            {
+                for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) {
+                    Entry currentItem = (Entry) iter.next();
+                    putIteratorToRequestParam(currentItem.getValue());
+                    SelectItem selectItem = createSelectItem();
+                    removeIteratorFromRequestParam();
+                    items.add(selectItem);
+                }
             }
         }
         

Modified: myfaces/tomahawk/trunk/examples/simple/src/main/java/org/apache/myfaces/examples/selectitems/SelectItemsBean.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/examples/simple/src/main/java/org/apache/myfaces/examples/selectitems/SelectItemsBean.java?rev=891039&r1=891038&r2=891039&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/examples/simple/src/main/java/org/apache/myfaces/examples/selectitems/SelectItemsBean.java (original)
+++ myfaces/tomahawk/trunk/examples/simple/src/main/java/org/apache/myfaces/examples/selectitems/SelectItemsBean.java Tue Dec 15 22:29:01 2009
@@ -21,6 +21,8 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
 
 import org.apache.myfaces.examples.listexample.SimpleCar;
 
@@ -29,6 +31,8 @@
     private List carList;
     
     private String selectedCarColor;
+    
+    private Map carMap;
 
     public List getCarList() {
         if(carList == null) {
@@ -49,7 +53,34 @@
         list.add(new SimpleCar(4, "Car 4", "green"));
         return list;
     }
+    
+    public Map getCarMap() {
+        if (carMap == null) {
+            carMap = createCarMap();
+        }
+        return carMap;
+    }
+
+    public void setCarMap(Map carMap)
+    {
+        this.carMap = carMap;
+    }
 
+    private Map createCarMap() {
+        Map list = new TreeMap();
+        list.put(new Integer(1), new SimpleCar(1, "Car 1", "blue"));
+        list.put(new Integer(2), new SimpleCar(2, "Car 2", "white"));
+        list.put(new Integer(3), new SimpleCar(3, "Car 3", "red"));
+        list.put(new Integer(4), new SimpleCar(4, "Car 4", "green"));
+        /*
+        list.put(new Integer(1), "Car 1");
+        list.put(new Integer(2), "Car 2");
+        list.put(new Integer(3), "Car 3");
+        list.put(new Integer(4), "Car 4");
+        */
+        return list;
+    }
+    
     public String getSelectedCarColor() {
         return selectedCarColor;
     }

Modified: myfaces/tomahawk/trunk/examples/simple/src/main/webapp/selectItems.jsp
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/examples/simple/src/main/webapp/selectItems.jsp?rev=891039&r1=891038&r2=891039&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/examples/simple/src/main/webapp/selectItems.jsp (original)
+++ myfaces/tomahawk/trunk/examples/simple/src/main/webapp/selectItems.jsp Tue Dec 15 22:29:01 2009
@@ -32,17 +32,40 @@
 <f:view>
 
     <h:form>
-		<h:selectOneMenu id="menu1" value="#{selectItemsBean.selectedCarColor}">
-   			<t:selectItems value="#{selectItemsBean.carList}" var="Car" itemLabel="#{Car.type}" itemValue="#{Car.color}" />
-		</h:selectOneMenu>
-		
-        <h:selectOneRadio id="radio1" value="#{selectItemsBean.selectedCarColor}">
-   			<t:selectItems value="#{selectItemsBean.carList}" var="Car" itemLabel="#{Car.type}" itemValue="#{Car.color}" />
-        </h:selectOneRadio>
+    
+        <h:outputText value ="List" />
+
+        <h:panelGrid columns="1">
+          <h:selectOneMenu id="menu1" value="#{selectItemsBean.selectedCarColor}">
+              <t:selectItems value="#{selectItemsBean.carList}" var="Car" itemLabel="#{Car.type}" itemValue="#{Car.color}" />
+          </h:selectOneMenu>
+          
+          <h:selectOneRadio id="radio1" value="#{selectItemsBean.selectedCarColor}">
+              <t:selectItems value="#{selectItemsBean.carList}" var="Car" itemLabel="#{Car.type}" itemValue="#{Car.color}" />
+          </h:selectOneRadio>
+          
+          <h:selectOneListbox id="list1" value="#{selectItemsBean.selectedCarColor}">
+              <t:selectItems value="#{selectItemsBean.carList}" var="Car" itemLabel="#{Car.type}" itemValue="#{Car.color}" />
+          </h:selectOneListbox>
+        </h:panelGrid>
+        
+        <h:outputText value ="Map" />
         
-        <h:selectOneListbox id="list1" value="#{selectItemsBean.selectedCarColor}">
-   			<t:selectItems value="#{selectItemsBean.carList}" var="Car" itemLabel="#{Car.type}" itemValue="#{Car.color}" />
-        </h:selectOneListbox>
+        <h:panelGrid columns="1">
+          <h:selectOneMenu id="menu2" value="#{selectItemsBean.selectedCarColor}">
+              <t:selectItems value="#{selectItemsBean.carMap}" var="Car" itemLabel="#{Car.type}" itemValue="#{Car.color}" />
+          </h:selectOneMenu>
+          
+          <h:selectOneRadio id="radio2" value="#{selectItemsBean.selectedCarColor}">
+              <t:selectItems value="#{selectItemsBean.carMap}" var="Car" itemLabel="#{Car.type}" itemValue="#{Car.color}" />
+          </h:selectOneRadio>
+          
+          <h:selectOneListbox id="list2" value="#{selectItemsBean.selectedCarColor}">
+              <t:selectItems value="#{selectItemsBean.carMap}" var="Car" itemLabel="#{Car.type}" itemValue="#{Car.color}" />
+          </h:selectOneListbox>
+        </h:panelGrid>
+
+        <h:commandButton value="GO!" action="doSomething"/>
     </h:form>
 </f:view>