Raj*_*pta 21 jsf jstl el jsf-2 uirepeat
我试图有条件地使用建立自定义列表<ui:repeat>.在每次出现-1作为列表中的项目值时,我需要添加换行符.
我尝试在<c:if>里面<ui:repeat>使用它,但它似乎不起作用.它总是评估false.
<ul>
<ui:repeat value="#{topics.list}" var="topicId" >
<li>#{topicId}</li>
<c:if test="#{topicId eq -1}"> <br/> </c:if>
</ui:repeat>
</ul>
Run Code Online (Sandbox Code Playgroud)
这可能吗?
Bal*_*usC 34
没有JSTL标签,没有.它们在视图构建时运行,而不是在视图渲染时.您可以按如下方式将其可视化,当JSF构建视图时,JSTL标记首先从底部开始运行,结果是纯JSF组件树.然后,当JSF呈现视图时,JSF组件从上到下运行,结果是一堆HTML.因此,JSTL和JSF不会像编码所期望的那样同步运行.在您的<c:if>运行时,#{topicId}范围内不可用.
<c:if>您需要在rendered感兴趣的JSF组件的属性中指定条件,而不是使用它.因为你实际上没有,你可以把它包装成一个<ui:fragment>.
<ul>
<ui:repeat value="#{topics.list}" var="topicId" >
<li>#{topicId}</li>
<ui:fragment rendered="#{topicId eq -1}"><br/></ui:fragment>
</ui:repeat>
</ul>
Run Code Online (Sandbox Code Playgroud)
替代方案是 <h:panelGroup>
<h:panelGroup rendered="#{topicId eq -1}"><br/></h:panelGroup>
Run Code Online (Sandbox Code Playgroud)
或在您的具体情况下 <h:outputText escape="false">
<h:outputText value="<br/>" escape="false" rendered="#{topicId eq -1}" />
Run Code Online (Sandbox Code Playgroud)
因为当没有指定客户端属性时,两者都不会向HTML输出发送任何其他内容.
与具体问题无关,这是一个错误的地方<br/>.任何关于HTML规范的webbrowser都会忽略它.难道你的意思是它是里面的<li>?或者更好,给它一个class让CSS给它一个margin-bottom.
| 归档时间: |
|
| 查看次数: |
19882 次 |
| 最近记录: |