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,我将根据条件呈现按钮。
我正在获取内部值,但每次我访问页面时,会有两个按钮加起来。请帮忙。
答案 0 :(得分:0)
3分:
外部循环声明r
和status
未在内部循环中使用,因此“这里我的第一个<ui:repeat>
从会话获取值并且我将作为参数传递给第二个“是假的
value="#{sessionScope['restrictpageload']}"
相当于value="#{restrictpageload}"
value="#{sessionScope['restrictpageload']}"
也许有一个错字。你的意思是value="#{sessionScope['restrictPageload']}"
(大写 P )也许你想做这样的事情:
<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?
然而,它是否会引发异常?