<ui:repeat>里面<ui:repeat>显示更多次数</ui:repeat> </ui:repeat>

时间:2014-01-16 08:05:13

标签: jsf-2

0,我需要根据条件渲染一些按钮,我的条件为真,但每次我访问页面时,按钮会显示添加按钮,这是我的代码

<ui:repeat var="r" value="#{sessionScope['restrictpageload']}" varStatus="status">    
    <ui:repeat var="permission" value="#{restrictPageLoad.isUserHasFeaturePermission(4,'abc')}" varStatus="status2">
        <ui:fragment rendered="#{permission.featureCreate eq 'y'}" >
            <h:commandButton value="Button1" action="#{bean.method()}"/>
        </ui:fragment>
    </ui:repeat>        
</ui:repeat>

这里我的第一个<ui:repeat>从会话中获取值,我将作为参数传递给第二个,这将返回arraylist,我将根据条件呈现按钮。

我正在获取内部值,但每次我访问页面时,会有两个按钮加起来。请帮忙。

1 个答案:

答案 0 :(得分:0)

评论太长了......

3分:

  1. 外部循环声明rstatus未在内部循环中使用,因此“这里我的第一个<ui:repeat>从会话获取值并且我将作为参数传递给第二个“是假的

  2. value="#{sessionScope['restrictpageload']}"相当于value="#{restrictpageload}"

  3. value="#{sessionScope['restrictpageload']}"也许有一个错字。你的意思是value="#{sessionScope['restrictPageload']}"(大写 P
  4. 也许你想做这样的事情:

    <ui:repeat var="restriction" value="#{bean.pageRestrictions}">
        <ui:repeat var="permission" value="#{bean.userPermissions}">    
            <ui:fragment rendered="#{restriction == permission}">
                <h:commandButton value="Button1" action="#{bean.method}"/>
            </ui:fragment>
        </ui:repeat>
    </ui:repeat>
    

    或更好

    <ui:repeat var="restriction" value="#{bean.pageRestrictions}">    
        <ui:fragment rendered="#{bean.userHasFeaturePermission(restriction)}">
            <h:commandButton value="Button1" action="#{bean.method}"/>
        </ui:fragment>
    </ui:repeat>
    

    但是如果您的按钮是重复的,那么您在循环中添加了一些内容,可能在isUserHasFeaturePermission中?


    更新(评论回复)

    仔细阅读您所关联问题的接受答案:

      

    你的问题毫无意义。没有“传递参数”并且没有“传递参数使用”。你的话可能在某些特定的背景下有意义 - 但缺少背景。

    没有关系但值得一提,从不在JSF页面中使用c:forEach,除非您确切了解JSF生命周期的工作原理。

    在表达式中传递参数取决于EL(ExpressionLanguage)库版本。

    只有拥有EL 2.2+时才能传递参数。这个库是(通常)与servlet容器一起发货的。

    阅读this answer并链接以获得完整的解释。

    你的servlet容器是什么? tomcat 6.0,glassfish 3.1?

    然而,它是否会引发异常?