我想通过我的页面访问一个变量。var 在 ui:repeat 元素中声明。听说变量的范围只在重复标签内。我想在同一页面上加载另一个div,它需要此变量中的详细信息。我怎样才能做到这一点。
<ui:repeat var="errorDetails"
value="#{adminDashboardController.errorDetails}" varStatus="status">
<tr>
<td>#{errorDetails.issueName}</td>
<td>#{errorDetails.priority}</td>
<td>#{errorDetails.comments}</td>
<td><h:commandButton class="btn btn-primary btn-xs view-issue"
value="View" /></td>
</tr>
</ui:repeat>
<h4 class="modal-title" id="myModalLabel">#{errorDetails.issueName}</h4>
errorDetails
变量仅在ui:repeat
范围内可用。
您在这里有两个选择:
HTML/JS 解决方案:生成包含表格每行一个<h4...>#{errorDetails.issueName}</h4>
的 HTML 代码,并在按下命令按钮时使用 JavaScript 显示正确的块。
我认为此选项应该仅用于性能原因,因为您将生成大量 HTML,并且作为 JSF 开发人员,您通常更喜欢避免在 JavaScript 中编写自定义内容。
JSF 解决方案(我的首选解决方案):使用后备 Bean 来保存当前查看的错误详细信息。那将是这样的:
<ui:repeat var="errorDetails" value="#{adminDashboardController.errorDetails}" varStatus="status">
...
<h:commandButton ... action="#{adminDashboardController.showDetails(errorDetails)" update="myModalLabel" />
...
</ui:repeat>
...
<h:panelGroup rendered="#{adminDashboardController.currentDetail != null}">
<h4 class="modal-title" id="myModalLabel">#{adminDashboardController.currentDetail.issueName}</h4>
</h:panelGroup>
AdminDashboardController.showDetails
方法会将给定的错误详细信息保存在字段currentDetail
中。