【问题标题】:Converting JSP to JSTL将 JSP 转换为 JSTL
【发布时间】:2012-08-07 04:50:56
【问题描述】:

我是 JSP 的初学者,需要一些帮助。我开始在我的第一个 JSP 页面中使用这段代码

<%
    LoginService user = new LoginService();
%>

Hello <%=user.getUserID() %>!

而且工作得很好。我正确导入了 LoginService 类,并且那段代码有效!但现在我正在学习 JSTL 并尝试将上述内容转换为 JSTL 标签。所以我右脚下车,但需要一些帮助才能完成。到目前为止我有

<jsp:useBean id="user" class="org.test.LoginService"></jsp:useBean>

但是我在将最后一行 Hello 转换为 JSTL 标记时遇到了麻烦!我不知道如何像在 JSP 标记中那样引用方法 getUserID()。我一个人走了这么远,但需要一些帮助才能完成!任何回应将不胜感激!

【问题讨论】:

  • 这种方法现在已经过时了。使用任何jsp 标记都没有位置。在您的情况下,使用 jsp:useBean 标记会创建类 LoginService 的另一个实例。使用更灵活和功能更强大的标签c:setc:out。它们沿EL可以完全替代使用scriptlet和jsp标签库。
  • 您可以了解为什么这种方法更可取herehere。顺便说一句,使用c:out 标签是有意义的。 Here的详细解释。

标签: java jsp jstl


【解决方案1】:

那就是:

Hello ${user.userID}!

【讨论】:

    【解决方案2】:

    您可以使用表达式语言:

    <c:out value="Hello ${user.userId}!" />
    

    【讨论】:

    • 我对此很陌生(今天学习了 jsp),我正在努力掌握你扔给我的一切。您能帮我理解如何以正确的方式创建用户对象吗?那会是通过使用 c:set 吗?谢谢
    • 当我尝试输入您的代码时,它对我不起作用。它有一个警告说未知标签(c:out)。当我尝试使用警告运行它时,我会抛出一个 404,并在该代码行抛出一个异常。
    • 在您的 servlet 中创建一个用户对象,并在 http 请求中将其设置为属性 request.setAttribute("user", user);。您也可以使用会话范围。这取决于问题的背景和目标。您需要正确包含jstl lib。你可以阅读here 来解决这个问题。
    【解决方案3】:

    你可以使用:

    <jsp:getProperty name="user" property="userID" /> 
    

    但更好用:

    ${user.userID}
    

    【讨论】: