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