在JSF2中单击div上的事件

时间:2011-12-06 14:24:39

标签: ajax jsf facelets uirepeat

我有一个由ui:repeat表示的列表,其中每个项目都是带有一些数据的div。我想要的是通过点击div来显示项目细节。

我使用刷新表单的按钮创建了它,但无法使用panelGroup上的onclick事件。

<h:panelGroup styleClass="container" layout="block">
        <ui:repeat value="#{bean.model}" var="item">

            <h:panelGroup styleClass="item_data" layout="block">
                ID: #{item.id}
                <h:commandButton action="#{bean.select}" value="Select item">
                    <f:param name="itemId" value="#{item.id}"/>
                    <f:ajax render="@form"></f:ajax>
                </h:commandButton>
            </h:panelGroup>

            <h:panelGroup styleClass="detail"
                layout="block" 
                rendered="#{item eq bean.selected}">
                value: #{bean.selected.value}
            </h:panelGroup>

        </ui:repeat>
    </h:panelGroup>

1 个答案:

答案 0 :(得分:2)

如果我理解正确,你只想显示细节部分而不重新渲染整个表格?如果是这样,那么将它包装在一个总是在HTML DOM树中呈现的组件中,给它一个id并改为引用它:

<ui:repeat value="#{bean.model}" var="item">
    <h:panelGroup styleClass="item_data" layout="block">
        ID: #{item.id}
        <h:commandButton action="#{bean.select}" value="Select item">
            <f:param name="itemId" value="#{item.id}"/>
            <f:ajax render="detail" />
        </h:commandButton>
    </h:panelGroup>

    <h:panelGroup id="detail">
        <h:panelGroup styleClass="detail"
            layout="block" 
            rendered="#{item eq bean.selected}">
            value: #{bean.selected.value}
        </h:panelGroup>
    </h:panelGroup>
</ui:repeat>

另见:


更新:根据评论,您实际上想要<h:panelGroup onclick>来调用JSF ajax操作,这是不可能的,因为它不支持onclick属性。您可以使用<div> jsf.ajax.request()函数,但更清晰的是使用带有<h:commandLink>的{​​{1}},以便它跨越整个div。

display: block

与例如

    <h:panelGroup styleClass="item_data" layout="block">
        <h:commandLink action="#{bean.select}" value="ID: #{item.id}" styleclass="detailLink">
            <f:param name="itemId" value="#{item.id}"/>
            <f:ajax render="detail" />
        </h:commandLink>
    </h:panelGroup>