【问题标题】:Selected item on datatable is not passed to backing bean数据表上的选定项目未传递给支持 bean
【发布时间】:2014-07-14 07:53:25
【问题描述】:

在我的 JSF 页面中,我有一个像这样的数据表:

<p:datatable var="item" value="#{bean.dataModel}" rowkey="#{item.pkey}" selectionMode="multiple" selection="#{bean.selectedItems}">

在我的 managedbean 中,我已将 selectedItems 声明为这样的列表

private List<SelectedItemsClass> selectedItems;
public void doInit() {
   selectedItems = new ArrayList<SelectedItemsClass>();
}

我还为selectedItems 声明了getter 和setter。现在,当我尝试调试检查 selectedItems 的操作之一时,selectedItems 大小的值始终为 0。我的代码中是否缺少某些内容?我试过在网上搜索,答案总是在数据表中使用 selection=""。请指教!

更新:问题的原因与数据表和数据模型本身无关。事实证明,问题在于我在数据模型类中用于行键的数据类型。我已经为 rowkey 设置了字符串值,但我的数据库将键作为 long 类型返回。通过更改我的 rowkey 的数据类型,selectedItems 现在已成功传递给我的 managedbean,我可以从那里处理选定的 Items。非常感谢您的宝贵时间。

【问题讨论】:

  • 1) 你的 bean 是什么范围? 2) 你的 xhtml 上有preRenderView 事件监听器吗? 3)doInit()什么时候被调用,是@PostConstruct方法吗?我从来没有尝试过多选的dataModel,所以我想复制这个场景给你一个答案!
  • 1) 不确定这是否是正确答案,但我使用了注释 ViewScoped 2) 不,我没有使用 preRenderView 事件监听器 3) doInit() 仅在页面加载时被调用,是的,这是一个@PostConstruct 方法。

标签: jsf primefaces


【解决方案1】:

你需要在jsf数据表配置中添加ajax事件,像这样:

<p:dataTable ...>
<p:ajax event="rowSelectCheckbox" process="@this"/>
<p:ajax event="rowUnselectCheckbox" process="@this"/>
<p:ajax event="toggleSelect" process="@this" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 2016-04-13
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多