簡體   English   中英

jsp / jstl頁面中的Java錯誤

[英]java error in jsp/jstl page

我有以下代碼:

<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是存儲在會話中的屬性,類型為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。 使用一個或另一個。 十多年來, 正式禁止使用 腳本 ,因此您應該忘記它們,並堅持使用taglibs / EL。 造成您的具體問題的原因是,無論JSTL標簽庫的結果如何,總是會調用腳本 它們不會根據編碼與taglib同步運行。 您可以將其可視化如下: scriptlet首先從上到下運行,然后輪到taglibs / EL從上到下運行。 您應該使用EL來訪問資源束屬性。 EL的另一個優點是它是null安全的,它不會拋出NPE,而只是繞過屬性訪問。

其次,當您用EL替換scriptlet時,您遇到了一個新問題, <c:otherwise>根本不支持test屬性。 擺脫它。 僅當<c:when>條件都不匹配<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>

在表達式中,您需要直接從會話中獲取捆綁包:

<%=((ResourceBundle)session.getAttribute("languageRB")).getString("style.language")%>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM