[ https://issues.apache.org/jira/browse/MYFACES-4560?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17688597#comment-17688597 ]
Bernd Bohmann edited comment on MYFACES-4560 at 2/14/23 7:55 PM: ----------------------------------------------------------------- I have a simple test to verify the wrong behavior {code:java} @Test public void testSelectListAsValue() { List<SelectItem> values = new ArrayList<>(); values.add(new SelectItem("#1", "D1")); values.add(new SelectItem("#2", "D2")); values.add(new SelectItem("#3", "D3")); UISelectItems selectItems = new UISelectItems(); selectItems.setValue(values); selectItems.getAttributes().put("var", "item"); ValueExpression itemValue = new MockValueExpression("#{item.label}", Object.class); ValueExpression itemLabel = new MockValueExpression("#{item.value}", Object.class); ValueExpression itemDescription = new MockValueExpression("#{item.value}", Object.class); selectItems.setValueExpression("itemValue", itemValue); selectItems.setValueExpression("itemLabel", itemLabel); selectItems.setValueExpression("itemDescription", itemLabel); UISelectOne selectOne = new UISelectOne(); selectOne.getChildren().add(selectItems); SelectItemsIterator iter = new SelectItemsIterator(selectOne, facesContext); List<String> options = new ArrayList<>(); List<String> labels = new ArrayList<>(); List<String> descriptions = new ArrayList<>(); while (iter.hasNext()) { SelectItem next = iter.next(); options.add((String) next.getValue()); labels.add(next.getLabel()); descriptions.add(next.getDescription()); } Assertions.assertAll( () -> Assertions.assertEquals(values.stream().map(SelectItem::getLabel).collect(Collectors.toList()), options), () -> Assertions.assertEquals(values.stream().map(SelectItem::getValue).collect(Collectors.toList()), labels), () -> Assertions.assertEquals(values.stream().map(SelectItem::getValue).collect(Collectors.toList()), descriptions)); }{code} was (Author: bommel): I have a simple test to verify the wrong behavior {code:java} @Test public void testSelectListAsValue() { List<SelectItem> values = new ArrayList<>(); values.add(new SelectItem("#1", "D1")); values.add(new SelectItem("#2", "D2")); values.add(new SelectItem("#3", "D3")); UISelectItems selectItems = new UISelectItems(); selectItems.setValue(values); selectItems.getAttributes().put("var", "item"); ValueExpression itemValue = new MockValueExpression("#{item.label}", Object.class); ValueExpression itemLabel = new MockValueExpression("#{item.key}", Object.class); ValueExpression itemDescription = new MockValueExpression("#{item.key}", Object.class); selectItems.setValueExpression("itemValue", itemValue); selectItems.setValueExpression("itemLabel", itemLabel); selectItems.setValueExpression("itemDescription", itemLabel); UISelectOne selectOne = new UISelectOne(); selectOne.getChildren().add(selectItems); SelectItemsIterator iter = new SelectItemsIterator(selectOne, facesContext); List<String> options = new ArrayList<>(); List<String> labels = new ArrayList<>(); List<String> descriptions = new ArrayList<>(); while (iter.hasNext()) { SelectItem next = iter.next(); options.add((String) next.getValue()); labels.add(next.getLabel()); descriptions.add(next.getDescription()); } Assertions.assertAll( () -> Assertions.assertEquals(values.stream().map(SelectItem::getLabel).collect(Collectors.toList()), options), () -> Assertions.assertEquals(values.stream().map(SelectItem::getValue).collect(Collectors.toList()), labels), () -> Assertions.assertEquals(values.stream().map(SelectItem::getValue).collect(Collectors.toList()), descriptions)); }{code} > Faces Issue #1791 SelectItems rendering > --------------------------------------- > > Key: MYFACES-4560 > URL: https://issues.apache.org/jira/browse/MYFACES-4560 > Project: MyFaces Core > Issue Type: Improvement > Affects Versions: 2.3.10, 2.3-next-M7, 3.0.2, 4.0.0-RC4 > Reporter: Melloware > Priority: Major > > See; [https://github.com/jakartaee/faces/issues/1791] > > The component should render the itemLabel as instructed by the provided EL, > even if the backed data type is SelectItem. The default rendering should only > be done when the attribute is missing. > Example: > {code:java} > <h:form id="frmTest"> > <p:selectOneMenu id="test1"> > <f:selectItems value="#{testView.items}" var="i" > itemValue="#{i.value}" itemLabel="#{i.value} - #{i.label}" /> > </p:selectOneMenu> > <p:selectOneMenu id="test2"> > <f:selectItems value="#{testView.items2}" var="i" > itemValue="#{i.key}" itemLabel="#{i.key} - #{i.value}" /> > </p:selectOneMenu> > <p:selectOneMenu id="test3"> > <f:selectItems value="#{testView.items}" /> > </p:selectOneMenu> > <p:selectOneMenu id="test4"> > <f:selectItems value="#{testView.items2}" /> > </p:selectOneMenu> > </h:form>{code} > The issue is `id="test1"` the user is expecting it to render > `itemLabel="#\{i.key} - #\{i.value}"` but it is ignored and just the > underlying Java SelectItem value is rendered. -- This message was sent by Atlassian Jira (v8.20.10#820010)