【问题标题】:What is the right way to call values from a bean in jsp page?从jsp页面中的bean调用值的正确方法是什么?
【发布时间】:2011-12-15 08:54:58
【问题描述】:

我正在开发一个 java MVC 项目。目前我有一个login.jspprofile.jsp, ``CheckLogin servlet、User.java bean 类和UserDAO dao 类(bean 和 jsp 以及所有其他东西也将被添加)。 每当用户成功登录时,我目前在这里所做的事情都会被重定向到显示用户所有详细信息的配置文件页面。 我的问题是:

在整个session 普遍存在的session 对象中为特定的userID 设置User 类型对象并在任何地方直接检索所有值作为${sessionScope.user.property} 是否更好?

最好只在session 对象中设置一个userID,该对象在整个session 中占主导地位,并使用这些代码行检索所有页面中的值: <jsp:useBean id="userDAO" scope="page" type="com.project.dao.UserDAO" /> <c:set var="user" value="<%= userDAO.getUser(%>${sessionScope.userID}<%) %>" /> ${user.property}

我希望我的问题对你很清楚。 请给我建议。

【问题讨论】:

    标签: model-view-controller jsp jstl javabeans


    【解决方案1】:

    第一条规则:避免使用 scriptlet。除了 scriptlet 之外没有其他解决方案这一事实表明存在设计问题。控制器应该为视图准备模型。视图不应直接调用 DAO。这是控制器的责任。

    现在,将用户存储在会话中或在每个请求(来自控制器)时加载它是性能和陈旧数据的问题。

    如果用户只包含在整个会话期间不会更改的数据(或者可能会更改,但仅来自此会话,允许在需要时刷新数据),则将其存储在会话中。这就是它的目标:存储具有会话范围的数据。

    如果可能有一些外部会话或进程正在修改用户的数据,并且您希望确保始终显示最新的数据,则在每次请求时重新加载。

    【讨论】:

    • 如果我在这种情况下不使用UserDAO,那么获取特定jsp页面的User对象的另一种方法是什么?请提出设计问题..
    • 我没有说你不应该使用 UserDAO。我说不应该从视图(JSP)调用它。它应该由控制器(servlet)调用,并且用户应该在分派到 JSP 之前存储在会话或请求中。见en.wikipedia.org/wiki/…
    猜你喜欢
    • 2010-12-08
    • 1970-01-01
    • 2015-09-10
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    相关资源
    最近更新 更多