这是一个常见问题,我已经看到了基本解决方案(填充selectManyListBox
)。这是我的JSF 1.2页面的代码:
<h:selectManyListbox id="statusMenu" converter="statusConverter" value="#{aprvAction.ap.statuses}" >
<f:selectItems id="statusItem" value="#{action.ap.statusItens}"/>
<a:support event="onclick" ajaxSingle="true" immediate="true" eventsQueue="queueGeral" />
<a:support event="onchange" ajaxSingle="true" eventsQueue="queueGeral" process="statusMenu"/>
</h:selectManyListbox>
问题是#{aprvAction.ap.statuses}
是List<Status>
类的实例。但是,在代码<f:selectItems>
中,值#{action.ap.statusItens}
是List<SelectItem>
的实例。
我使用我想要预先选择ListBox的值填充#{aprvAction.ap.statuses}
,但不起作用。我认为这是因为它们是<selectManyListBox>
和<selectItems>
中的不同对象。
如何解决此问题,并在<selectManyListBox>
?
答案 0 :(得分:1)
JSF将使用equals()
方法将可用项目与(预)选定项目进行比较。
如果是标准对象,例如String
,则为already implemented。
如果是自定义对象,例如您的Status
实体,则您有责任确保在课程中正确实施了equals()
(和hashCode()
)方法。
答案 1 :(得分:0)
value
中的 h:selectManyListbox
应该是itemValue
中f:selectItems
的子集。
创建一个返回所选状态的List或Array的方法。在value
的{{1}}属性中使用此方法。此方法中返回的列表/数组中的任何值都应与h:selectManyListbox
中使用的{itemValue,itemLabel}对集合中的itemValue匹配。