java jsp页面中<c:choose>中<c:when><c:otherwise>不显示内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java jsp页面中<c:choose>中<c:when><c:otherwise>不显示内容相关的知识,希望对你有一定的参考价值。

list中有值,页面只显示jsp include 的

页面显示一半,一般来说是系统报错了,你把页面右键,选择查看源文件,可以看到错误提示的。追问

怎样查看源文件

网页源代码显示是<hr/>下是空白

追答

哦,这样的话,应该是正常的,那么这样处理,在jsp 13,17,65那几个入口,随便打点什么不同的字符,然后运行一下,确认进入了哪个when,或者otherwise

追问

<c:when test="$err !='' ">

$err

</c:when>

他会调到这个when中,但没有存err这个值啊,应该是空的?

正常代码会直接调到第二个if中

追答

可能是 err是null吧,你调试一下,确认进入第二个if,另外,在第二个if中一样加上 request.setAttribute("err",err);

参考技术A </c:choose>应该在form上面 参考技术B 运行效果及有报错贴上报错的,贴这些很难看得出来。

JSF 页面中的 <c:choose><c:when> 不起作用,似乎总是评估为 false

【中文标题】JSF 页面中的 <c:choose><c:when> 不起作用,似乎总是评估为 false【英文标题】:<c:choose><c:when> in JSF page does not work, seems to always evaluate false 【发布时间】:2013-12-26 23:53:49 【问题描述】:

在我的 JSF 页面中,我使用 &lt;c:choose&gt;&lt;c:when&gt; 标记有条件地显示内容。但是,它不起作用,因为它似乎总是评估 false

例如

<h:outputText value="#pollInfo.active -" />
<c:choose>
    <c:when test="#pollInfo.active">
        <h:outputText value="Active" />
    </c:when>
    <c:otherwise>
        <h:outputText value="Deactive" />
    </c:otherwise>
</c:choose>

肯定有一些带有active=true 的项目,由&lt;h:outputText&gt; 确认,但它只为所有项目打印Deactive。你可以在下图中看到实际的输出:

这是怎么引起的,我该如何解决?

【问题讨论】:

【参考方案1】:

症状和屏幕截图表明,#pollInfo 表示迭代 UI 组件的当前迭代项,例如 &lt;ui:repeat&gt;&lt;h:dataTable&gt;&lt;p:tabView&gt;&lt;p:dataTable&gt; 等。

JSTL 标记在视图构建期间运行,即基于 XHTML 源代码构建 JSF 组件树的时刻。此类迭代 UI 组件的 var 属性仅在视图渲染期间可用,即基于 JSF 组件树生成 HTML 输出的那一刻。

换句话说,它们不会“同步”运行。在视图构建期间,#pollInfo 始终为 null

在这种特殊情况下,您需要 JSF 组件的 rendered 属性。

<h:outputText value="Active" rendered="#pollInfo.active" />
<h:outputText value="Deactive" rendered="#not pollInfo.active" />

或者,如果您打算有条件地渲染较大的代码,请将所有代码都包装在 &lt;ui:fragment&gt; 中:

<ui:fragment rendered="#pollInfo.active">
    <h:outputText value="Active" />
    <!-- Some more components here if necessary. -->
</ui:fragment>
<ui:fragment rendered="#not pollInfo.active">
    <h:outputText value="Deactive" />
    <!-- Some more components here if necessary. -->
</ui:fragment>

鉴于您有一个纯 if-else,另一种选择是在 EL 中使用条件运算符:

<h:outputText value="#pollInfo.active ? 'Active' : 'Deactive'" />

额外的好处是,您最终得到的代码要少得多。

另见:

JSTL in JSF2 Facelets... makes sense?

【讨论】:

以上是关于java jsp页面中<c:choose>中<c:when><c:otherwise>不显示内容的主要内容,如果未能解决你的问题,请参考以下文章

jsp页面如何获取modelmap值

JSTL--JSTL表达式:c:set,c:if,c:choose,--drp214

jsp中使用EL表达式的简写方式

JSF 页面中的 <c:choose><c:when> 不起作用,似乎总是评估为 false

jsp中实现if(){}else if(){}else{}

同时使用 Thymeleaf 和 JSP