访问外部ui的var:重复JSF2

时间:2014-02-20 10:50:19

标签: jsf jsf-2 uirepeat

我想通过我的页面访问变量。 var在ui:repeat元素中声明。听说变量的范围只在repeat标签内。我想在同一页面上加载另一个需要此var内部细节的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>

1 个答案:

答案 0 :(得分:0)

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中保存给定的错误详细信息。