如何在 h:selectManyListbox 中预先 select 数据

How to pre-select data in h:selectManyListbox

这是一个常见问题,我已经看到了基本的解决方案(填充 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> class 的一个实例。但是,在标记 <f:selectItems> 中,值:#{action.ap.statusItens}List<SelectItem>.

的实例

我用我想要预先 select 列表框的值填充 #{aprvAction.ap.statuses},但没有用。我认为这是因为它们在 <selectManyListBox><selectItems>.

中是不同的对象

如何解决这个问题,并在 <selectManyListBox> 中显示 select 前的值?

h:selectManyListbox 中的

value 应该是 f:selectItemsitemValue 的子集。

创建一个方法,其中 return 所选状态的列表或数组。在 h:selectManyListboxvalue 属性中使用此方法。此方法中 list/array returned 的任何值都应与 f:selectItems 中使用的 {itemValue, itemLabel} 对集合中的 itemValue 相匹配。

JSF 将使用 equals() 方法将可用项目与(预)选定项目进行比较。

对于标准对象,例如 String,这是 already implemented

对于自定义对象,例如您的 Status 实体,您有责任确保已在class.

另请参阅:

  • How to populate options of h:selectOneMenu from database?
  • Right way to implement equals contract