3

我有一个由 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>
4

1 回答 1

4

如果我理解正确,您只想显示详细信息部分而不重新呈现整个表单?如果是这样,则将其包装在始终呈现在 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>withjsf.ajax.request()函数,但更简洁的方法是使用<h:commandLink>with CSS display: block,以便它跨越整个 div。

    <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>

与例如

.detailLink {
    display: block;
    color: black;
    text-decoration: none;
}
于 2011-12-06T14:28:40.587 回答