【问题标题】:Click event on div in JSF2JSF2中div上的单击事件
【发布时间】:2011-12-06 14:24:38
【问题描述】:

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

【问题讨论】:

    标签: ajax jsf facelets uirepeat


    【解决方案1】:

    如果我理解正确,您只是想显示详细信息部分而不重新呈现整个表单?如果是这样,则将其包装在始终呈现在 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>
    

    另见:


    更新:根据 cmets,您实际上想通过 &lt;h:panelGroup onclick&gt; 调用 JSF ajax 操作,不,这是不可能的,因为它不支持 onclick 属性。您可以将&lt;div&gt;jsf.ajax.request() 函数一起使用,但更简洁的方法是将&lt;h:commandLink&gt; 与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;
    }
    

    【讨论】:

    • 我的问题是关于如何在没有 commandButton 的情况下实现相同的功能,只需使用 panelGroup 'item_data' 上的 'click' 事件。我假装模拟的行为是 div onclick 事件。顺便说一句,感谢您的更正。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    相关资源
    最近更新 更多