"/> languageRB 是存储在 session 中的属性-6ren">
gpt4 book ai didi

jsp/jSTL页面中的java错误

转载 作者:行者123 更新时间:2023-12-01 14:49:35 26 4
gpt4 key购买 nike

我有以下代码:

<c:choose>
<c:when test="${empty sessionScope.languageRB}">
<html:hidden property="language" value="en"/>
<html:hidden property="country" value="GB"/>
</c:when>
<c:otherwise test="${not empty sessionScope.languageRB}">
<html:hidden property="language" value="<%=languageRB.getString("style.language")%>"/>
<html:hidden property="country" value="<%=languageRB.getString("style.country")%>"/>
</c:otherwise>
</c:choose>

languageRB 是存储在 session 中的属性,类型为 ResourceBundle。我想要执行以下操作:如果 session 中存在 languageRB,则使用括号中的字符串值定义该属性,否则该属性将设置为默认值。

我收到以下错误:

    org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 89 in the jsp file: /pages/common002-preparelogin.jsp
languageRB cannot be resolved

88: <c:otherwise test="${not empty sessionScope.languageRB}">
89: <html:hidden property="language" value="<%=languageRB.getString("style.language")%>"/>
90: <html:hidden property="country" value="<%=languageRB.getString("style.country")%>"/>

最佳答案

首先,您不应该混合 scriptlet 和 taglibs/EL。使用其中之一。 scriptletofficially discouraged十年以来,您应该忘记它们并坚持使用 taglibs/EL。您的具体问题是因为无论 JSTL 标记库的结果如何,总是调用 scriptltets 。它们不与基于编码的标签库同步运行。您可以将其可视化如下:scriptlet 首先从上到下运行,然后轮到 taglibs/EL 再次从​​上到下运行。您应该使用 EL 来访问资源包属性。另一个优点是 EL 是空安全的,它不会抛出 NPE,而只是绕过属性访问。

其次,当您用 EL 替换 scriptlet 时,您会遇到一个新问题,即 <c:otherwise> 不支持test根本没有属性。摆脱它。仅当 <c:when> 都没有时,它才被命中。条件已匹配。

所以,总而言之,这应该可以:

<c:choose>
<c:when test="${empty sessionScope.languageRB}">
<html:hidden property="language" value="en"/>
<html:hidden property="country" value="GB"/>
</c:when>
<c:otherwise>
<html:hidden property="language" value="${languageRB['style.language']}"/>
<html:hidden property="country" value="${languageRB['style.country']}"/>
</c:otherwise>
</c:choose>

关于jsp/jSTL页面中的java错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15025439/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com