如何将选定的行传递给dataTable中的commandLink或ui:repeat?
我在JSF 2应用程序中使用Primefaces。我有一个
<p:dataTable>
,而不是选择行,我希望用户能够直接对各行执行各种操作。为此,我在最后一栏中有几个<p:commandLink>
s。
我的问题:如何将行ID传递给命令链接启动的操作,以便我知道要对哪一行进行操作?我尝试使用<f:attribute>
:
<p:dataTable value="#{bean.items}" var="item">
...
<p:column>
<p:commandLink actionListener="#{bean.insert}" value="insert">
<f:attribute name="id" value="#{item.id}" />
</p:commandLink>
</p:column>
</p:dataTable>
但它总是产生0 - 显然行变量f
在渲染属性时不可用(当我使用固定值时它可以工作)。
有人有替代解决方案吗?
没有找到相关结果
已邀请:
4 个回复
温拎凯玛
特定于组件本身(在视图构建时填充),而不是迭代行(在视图渲染时填充)。 有几种方法可以达到要求。 请改用
。它添加了一个请求参数。
如果你的bean是请求作用域,让JSF将它设置为
或者,如果您的bean具有更广泛的范围,或者您想要更精细的验证/转换,请在目标视图上使用
,另请参阅f:viewParam vs @ManagedProperty:
无论哪种方式,这都具有以下优点:对于表单提交,不一定需要保留数据模型(对于您的bean是请求作用域的情况)。 请改用
。优点是当bean具有比请求范围更广的范围时,这消除了访问请求参数映射的需要。
结合使用
它将只能通过属性
在行动方法中获得。这只需要为表单提交请求保留datamodel。最好的是将bean放在视图范围内
。 如果您的servletcontainer支持Servlet 3.0 / EL 2.2,那么只需将其作为方法参数传递。这还要求为表单提交请求保留datamodel。最好的是将bean放在视图范围内
。
结合:
您甚至可以传递整个项目对象:
有:
在Servlet 2.5容器上,如果你提供支持它的EL实现,就像JBoss EL一样,这也是可能的。有关配置详细信息,请参阅此答案。 将数据表值绑定到
而不是包装项目。
同
(当你在视图或会话范围的bean上使用它时,将它设置为
并在getter中实例化它是强制性的,因为
没有实现
) 然后,您将能够通过
访问当前行而不传递任何东西(JSF根据单击的命令链接/按钮的请求参数名称确定行)。
这还要求为表单提交请求保留datamodel。最好的是将bean放在视图范围内
。 您可以使用
以编程方式评估当前的
。
选择哪种方式取决于功能要求以及这一方面是否为其他目的提供了更多优势。我个人会继续使用#3,或者当你想支持servlet 2.5容器时,#2。
亨尖玛次酥
(在命令组件内)完成的。在JSF 2.0(确切地说是EL 2.2,感谢BalusC),可以这样做:
嘘崇蔡对
支持豆
荒劫娇噬
同
从技术上讲,你不能直接传递给方法本身,而是传递给
。