在 ui 之外访问 var:重复 JSF2



我想通过我的页面访问一个变量。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中。

相关内容

  • 没有找到相关文章

最新更新