动态导入JSP页面中的文件

时间:2010-11-09 13:39:36

标签: jsp tomcat jspinclude

我希望我的JSP页面包含基于Request中的值的另一个页面。 所以我设置了以下内容:

    request.setAttribute("chosenLang", "NL");
    RequestDispatcher dispatcher = request.getRequestDispatcher(address);
    dispatcher.forward(request, response);

当我到达'地址'页面时,我尝试执行以下操作:

<c:choose>
    <c:when test="${chosenLang eq 'NL'}">
        <%@include file="/Localization/NL_Localization.jsp" %>
    </c:when>
    <c:otherwise>
        <%@include file="/Localization/EN_Localization.jsp" %>
    </c:otherwise>
</c:choose>

所以,我知道selectedLang找到了'NL'属性,因为当我将标记和<c:out value="Test" />之间的变化更改为有效时,我看到我的页面上提到了测试,当我输入2个值时在那里,一个用于NL,一个用于其他语言,它也会改变。

但是,当我尝试使用在其中一个Localization.jsp文件中定义的字符串时,出现了真正的错误:

<%
String welcomeStr="this is defining String variable";
%>

当我在我的页面中某处调用该字符串时,如

 <%=welcomeStr%>

我的IDE并没有警告我有什么不对劲。但是当我编译并运行时,我收到以下错误:

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

An error occurred at line: 48 in the jsp file: /index3.jsp
welcomeStr cannot be resolved
45:                     <li>My courses</li>
46:                     <li>My messages [1]</li>
47:                     <li>My details</li>
48:                     <li> <%=welcomeStr%></li>
49:                 </ul>
50:             </div>
51:             <div id="menuHolder">

那么,我在这里错过了什么? 或者以另一种方式更方便吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

尝试查看ResourceBundle。这将允许您做的是编写1个JSP文件,页面上的所有措辞都将在属性文件中进行控制。这将避免您必须在jsp文件中编写逻辑来控制语言。

您的JSP页面可以读取属性文件,每个属性文件都有不同语言/国家的措辞。

有很多关于如何使用ResourceBundle的教程。这是Oracle

中的一个