我正在使用JSF 2.0和primefaces 3.0。我有一个rowtoggler和rowexpansion。由于我使用的是primefaces旧版本所以我没有rowToggle事件。我需要在行扩展时通过ajax在服务器端调用一个方法。所以我在rowtoggler周围添加了div标签并调用了javascript函数。现在我想通过在rowexpansion里面的panelgrid的click事件启动ajax调用。如果发生这种情况,那么它将看起来像3.4 rowToggle事件。
答案 0 :(得分:4)
您可以使用jQuery的事件绑定在单击行切换器时执行Javascript。
<h:form id="form">
<p:dataTable id="dt" value="[1,2]">
<p:column>
<p:rowToggler />
</p:column>
</p:dataTable>
<p:remoteCommand name="remotecommand"
oncomplete="alert('remote command fired')" />
</h:form>
<script type="text/javascript">
$("[id='form:dt'] .ui-row-toggler").on("click", function() { remotecommand(); });
</script>
Javascript的说明:
$("[id='form:dt'] .ui-row-toggler")
按id(form:dt
)选择数据表,然后选择所有具有样式类ui-row-toggler
的后代。
.on("click", function() { remotecommand(); })
将匿名函数绑定到单击事件,该事件触发p:remoteCommand
声明的Javascript函数。
您可以使用p:remoteCommand
执行bean方法action
或actionListener
。 ; - )
请注意,我认为这不是一个长期的解决方案。升级到PrimeFaces 3.4将是一个更好的解决方案。
答案 1 :(得分:2)
我已将commandLink arround和rowtoggler放在一起,我通过commandlink进行ajax调用,我也可以使用EL2.2传递值:
<p:commandLink action="#{myBean.doSomething(foo)}" >
<p:rowToggler/>
</p:commandLink>
答案 2 :(得分:0)
我猜你有点像
<p:panelGrid>
<p:ajax event="click" listener="#{bean.onclick}" />
...
the rest of the grid here
...
<p:panelGrid>
我没有测试过,但它适用于其他组件
答案 3 :(得分:0)
除了siebz0r的解决方案,我找到了另一个解决方案。
<p:commandLink action="#{bean.abcFunction}"> <p:rowToggler/> </p:commandLink>
它也很简单: - )