如何通过jquery或javascript生成panelgrid的click事件?

时间:2012-12-12 13:02:06

标签: javascript jquery jsf primefaces

我正在使用JSF 2.0和primefaces 3.0。我有一个rowtoggler和rowexpansion。由于我使用的是primefaces旧版本所以我没有rowToggle事件。我需要在行扩展时通过ajax在服务器端调用一个方法。所以我在rowtoggler周围添加了div标签并调用了javascript函数。现在我想通过在rowexpansion里面的panelgrid的click事件启动ajax调用。如果发生这种情况,那么它将看起来像3.4 rowToggle事件。

4 个答案:

答案 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方法actionactionListener。 ; - )

请注意,我认为这不是一个长期的解决方案。升级到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>

它也很简单: - )