You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by mb...@apache.org on 2005/09/02 16:57:58 UTC
svn commit: r267219 - in /myfaces/api/trunk/src/java/javax/faces/component:
UISelectMany.java UISelectOne.java _SelectItemsUtil.java
Author: mbr
Date: Fri Sep 2 07:57:54 2005
New Revision: 267219
URL: http://svn.apache.org/viewcvs?rev=267219&view=rev
Log:
fix for MYFACES-471
Added:
myfaces/api/trunk/src/java/javax/faces/component/_SelectItemsUtil.java (with props)
Modified:
myfaces/api/trunk/src/java/javax/faces/component/UISelectMany.java
myfaces/api/trunk/src/java/javax/faces/component/UISelectOne.java
Modified: myfaces/api/trunk/src/java/javax/faces/component/UISelectMany.java
URL: http://svn.apache.org/viewcvs/myfaces/api/trunk/src/java/javax/faces/component/UISelectMany.java?rev=267219&r1=267218&r2=267219&view=diff
==============================================================================
--- myfaces/api/trunk/src/java/javax/faces/component/UISelectMany.java (original)
+++ myfaces/api/trunk/src/java/javax/faces/component/UISelectMany.java Fri Sep 2 07:57:54 2005
@@ -15,14 +15,17 @@
*/
package javax.faces.component;
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.convert.ConverterException;
import javax.faces.el.ValueBinding;
-
import javax.faces.render.Renderer;
-import java.lang.reflect.Array;
-import java.util.List;
/**
* see Javadoc of JSF Specification
@@ -30,14 +33,13 @@
* @author Manfred Geiler (latest modification by $Author$)
* @version $Revision$ $Date$
*/
-public class UISelectMany
- extends UIInput
+public class UISelectMany extends UIInput
{
public static final String INVALID_MESSAGE_ID = "javax.faces.component.UISelectMany.INVALID";
public Object[] getSelectedValues()
{
- return (Object[])getValue();
+ return (Object[]) getValue();
}
public void setSelectedValues(Object[] selectedValues)
@@ -47,7 +49,8 @@
public ValueBinding getValueBinding(String name)
{
- if (name == null) throw new NullPointerException("name");
+ if (name == null)
+ throw new NullPointerException("name");
if (name.equals("selectedValues"))
{
return super.getValueBinding("value");
@@ -58,10 +61,10 @@
}
}
- public void setValueBinding(String name,
- ValueBinding binding)
+ public void setValueBinding(String name, ValueBinding binding)
{
- if (name == null) throw new NullPointerException("name");
+ if (name == null)
+ throw new NullPointerException("name");
if (name.equals("selectedValues"))
{
super.setValueBinding("value", binding);
@@ -75,8 +78,7 @@
/**
* @return true if Objects are different (!)
*/
- protected boolean compareValues(Object previous,
- Object value)
+ protected boolean compareValues(Object previous, Object value)
{
if (previous == null)
{
@@ -90,18 +92,17 @@
}
else
{
- if (previous instanceof Object[] &&
- value instanceof Object[])
+ if (previous instanceof Object[] && value instanceof Object[])
{
- return compareObjectArrays((Object[])previous, (Object[])value);
+ return compareObjectArrays((Object[]) previous,
+ (Object[]) value);
}
- else if (previous instanceof List &&
- value instanceof List)
+ else if (previous instanceof List && value instanceof List)
{
- return compareLists((List)previous, (List)value);
+ return compareLists((List) previous, (List) value);
}
- else if (previous.getClass().isArray() &&
- value.getClass().isArray())
+ else if (previous.getClass().isArray()
+ && value.getClass().isArray())
{
return comparePrimitiveArrays(previous, value);
}
@@ -113,11 +114,10 @@
}
}
- private boolean compareObjectArrays(Object[] previous,
- Object[] value)
+ private boolean compareObjectArrays(Object[] previous, Object[] value)
{
- int length = ((Object[])value).length;
- if (((Object[])previous).length != length)
+ int length = ((Object[]) value).length;
+ if (((Object[]) previous).length != length)
{
//different length
return true;
@@ -133,8 +133,8 @@
if (scoreBoard[j] == false)
{
Object v = value[j];
- if ((p == null && v == null) ||
- (p != null && v != null && p.equals(v)))
+ if ((p == null && v == null)
+ || (p != null && v != null && p.equals(v)))
{
scoreBoard[j] = true;
found = true;
@@ -144,11 +144,11 @@
}
if (!found)
{
- return true; //current element of previous array not found in new array
+ return true; //current element of previous array not found in new array
}
}
- return false; // arrays are identical
+ return false; // arrays are identical
}
private boolean compareLists(List previous, List value)
@@ -170,8 +170,8 @@
if (scoreBoard[j] == false)
{
Object v = value.get(j);
- if ((p == null && v == null) ||
- (p != null && v != null && p.equals(v)))
+ if ((p == null && v == null)
+ || (p != null && v != null && p.equals(v)))
{
scoreBoard[j] = true;
found = true;
@@ -181,11 +181,11 @@
}
if (!found)
{
- return true; //current element of previous List not found in new List
+ return true; //current element of previous List not found in new List
}
}
- return false; // Lists are identical
+ return false; // Lists are identical
}
private boolean comparePrimitiveArrays(Object previous, Object value)
@@ -207,8 +207,8 @@
if (scoreBoard[j] == false)
{
Object v = Array.get(value, j);
- if ((p == null && v == null) ||
- (p != null && v != null && p.equals(v)))
+ if ((p == null && v == null)
+ || (p != null && v != null && p.equals(v)))
{
scoreBoard[j] = true;
found = true;
@@ -218,22 +218,23 @@
}
if (!found)
{
- return true; //current element of previous array not found in new array
+ return true; //current element of previous array not found in new array
}
}
- return false; // arrays are identical
+ return false; // arrays are identical
}
protected void validateValue(FacesContext context, Object convertedValue)
{
- boolean empty =
- convertedValue == null
- || ((convertedValue instanceof Object[]) && (((Object[]) convertedValue).length == 0))
- || ((convertedValue instanceof List) && ((List) convertedValue).isEmpty());
+ boolean empty = convertedValue == null
+ || ((convertedValue instanceof Object[]) && (((Object[]) convertedValue).length == 0))
+ || ((convertedValue instanceof List) && ((List) convertedValue)
+ .isEmpty());
if (isRequired() && empty)
{
- _MessageUtils.addErrorMessage(context, this, REQUIRED_MESSAGE_ID,new Object[]{getId()});
+ _MessageUtils.addErrorMessage(context, this, REQUIRED_MESSAGE_ID,
+ new Object[] {getId()});
setValid(false);
return;
}
@@ -243,8 +244,31 @@
_ComponentUtils.callValidators(context, this, convertedValue);
}
- //TODO: see javadoc: iterate through UISelectItem and UISelectItems and check
- //current values against these items
+ if (isValid() && convertedValue != null)
+ {
+ // all selected values must match to the values of the available options
+ Object[] values = (Object[]) convertedValue;
+ if (values.length > 0)
+ {
+ Collection items = new ArrayList();
+ for (Iterator iter = new _SelectItemsIterator(this); iter
+ .hasNext();)
+ {
+ items.add(iter.next());
+ }
+ for (int i = 0, size = values.length; i < size; i++)
+ {
+ if (!_SelectItemsUtil.matchValue(context, values[i],
+ items.iterator()))
+ {
+ _MessageUtils.addErrorMessage(context, this,
+ INVALID_MESSAGE_ID,
+ new Object[] {getId()});
+ setValid(false);
+ }
+ }
+ }
+ }
}
/**
@@ -259,15 +283,17 @@
super.validate(context);
}
-
- protected Object getConvertedValue(FacesContext context, Object submittedValue)
+ protected Object getConvertedValue(FacesContext context,
+ Object submittedValue)
{
try
{
Renderer renderer = getRenderer(context);
if (renderer != null)
{
- return renderer.getConvertedValue(context, this, submittedValue);
+ return renderer
+ .getConvertedValue(context, this,
+ submittedValue);
}
else if (submittedValue == null)
{
@@ -275,8 +301,8 @@
}
else if (submittedValue instanceof String[])
{
- return _SharedRendererUtils.getConvertedUISelectManyValue(context, this,
- (String[])submittedValue);
+ return _SharedRendererUtils.getConvertedUISelectManyValue(
+ context, this, (String[]) submittedValue);
}
}
catch (ConverterException e)
@@ -288,23 +314,20 @@
}
else
{
- _MessageUtils.addErrorMessage(context, this, CONVERSION_MESSAGE_ID,new Object[]{getId()});
+ _MessageUtils.addErrorMessage(context, this,
+ CONVERSION_MESSAGE_ID, new Object[] {getId()});
}
setValid(false);
}
return submittedValue;
}
-
-
-
//------------------ GENERATED CODE BEGIN (do not modify!) --------------------
public static final String COMPONENT_TYPE = "javax.faces.SelectMany";
public static final String COMPONENT_FAMILY = "javax.faces.SelectMany";
private static final String DEFAULT_RENDERER_TYPE = "javax.faces.Listbox";
-
public UISelectMany()
{
setRendererType(DEFAULT_RENDERER_TYPE);
@@ -314,7 +337,6 @@
{
return COMPONENT_FAMILY;
}
-
//------------------ GENERATED CODE END ---------------------------------------
}
Modified: myfaces/api/trunk/src/java/javax/faces/component/UISelectOne.java
URL: http://svn.apache.org/viewcvs/myfaces/api/trunk/src/java/javax/faces/component/UISelectOne.java?rev=267219&r1=267218&r2=267219&view=diff
==============================================================================
--- myfaces/api/trunk/src/java/javax/faces/component/UISelectOne.java (original)
+++ myfaces/api/trunk/src/java/javax/faces/component/UISelectOne.java Fri Sep 2 07:57:54 2005
@@ -45,44 +45,12 @@
}
// selected value must match to one of the available options
- if (!matchValue(context, value, new _SelectItemsIterator(this)))
+ if (!_SelectItemsUtil.matchValue(context, value, new _SelectItemsIterator(this)))
{
_MessageUtils.addErrorMessage(context, this, INVALID_MESSAGE_ID,
new Object[] {getId()});
setValid(false);
}
- }
-
- /**
- * @param context
- * @param value
- * @param iterator
- * @return
- */
- private boolean matchValue(FacesContext context, Object value,
- Iterator selectItemsIter)
- {
- while (selectItemsIter.hasNext())
- {
- SelectItem item = (SelectItem) selectItemsIter.next();
- if (value.equals(item.getValue()))
- {
- return true;
- }
- if (item instanceof SelectItemGroup)
- {
- SelectItemGroup itemgroup = (SelectItemGroup) item;
- SelectItem[] selectItems = itemgroup.getSelectItems();
- if (selectItems != null
- && selectItems.length > 0
- && matchValue(context, value, Arrays.asList(
- selectItems).iterator()))
- {
- return true;
- }
- }
- }
- return false;
}
//------------------ GENERATED CODE BEGIN (do not modify!) --------------------
Added: myfaces/api/trunk/src/java/javax/faces/component/_SelectItemsUtil.java
URL: http://svn.apache.org/viewcvs/myfaces/api/trunk/src/java/javax/faces/component/_SelectItemsUtil.java?rev=267219&view=auto
==============================================================================
--- myfaces/api/trunk/src/java/javax/faces/component/_SelectItemsUtil.java (added)
+++ myfaces/api/trunk/src/java/javax/faces/component/_SelectItemsUtil.java Fri Sep 2 07:57:54 2005
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package javax.faces.component;
+
+import java.util.Arrays;
+import java.util.Iterator;
+
+import javax.faces.context.FacesContext;
+import javax.faces.model.SelectItem;
+import javax.faces.model.SelectItemGroup;
+
+/**
+ * @author Mathias Broekelmann (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
+class _SelectItemsUtil
+{
+ /**
+ * @param context the faces context
+ * @param value the value to check
+ * @param iterator contains instances of SelectItem
+ * @return if the value of a selectitem is equal to the given value
+ */
+ public static boolean matchValue(FacesContext context, Object value,
+ Iterator selectItemsIter)
+ {
+ while (selectItemsIter.hasNext())
+ {
+ SelectItem item = (SelectItem) selectItemsIter.next();
+ if (value.equals(item.getValue()))
+ {
+ return true;
+ }
+ if (item instanceof SelectItemGroup)
+ {
+ SelectItemGroup itemgroup = (SelectItemGroup) item;
+ SelectItem[] selectItems = itemgroup.getSelectItems();
+ if (selectItems != null
+ && selectItems.length > 0
+ && matchValue(context, value, Arrays.asList(
+ selectItems).iterator()))
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+}
Propchange: myfaces/api/trunk/src/java/javax/faces/component/_SelectItemsUtil.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: myfaces/api/trunk/src/java/javax/faces/component/_SelectItemsUtil.java
------------------------------------------------------------------------------
svn:keywords = Id Revision Date Author