【问题标题】:Session attribute not reflected in JSP会话属性未反映在 JSP 中
【发布时间】:2014-04-07 17:37:09
【问题描述】:

所以我有一个 jsp ,它加载一些请求参数作为我在我的第二个 jsp 中访问的会话。

我的 jsp 1 代码是:

<jsp:useBean id="Emails" scope="request" class="java.lang.String" />
<%

String email = Emails;
session.setAttribute( "allEmail",email);
%>

<p style="display:block" ><%= session.getAttribute( "allEmail" )%></p>

我的 jsp 2 代码是:

<p style="display:block" ><%= session.getAttribute( "allEmail" )%></p>

现在我可以看到第一个 jsp 中的 &lt;p&gt; 正确填充了数据,但我的第二个 jsp 中的段落只是空白

当我将session.setAttribute( "allEmail",email); 更改为session.setAttribute( "allEmail","hello world); 之类的东西时,我可以看到两个段落中都反映了正确的值。

我做错了什么?

填充 jsp1 的 servlet 具有以下请求调度程序

RequestDispatcher dispatch = request.getRequestDispatcher("jsp1");

我认为问题在于两个 jsp 同时初始化,因此第二个 jsp 中的会话没有价值。

【问题讨论】:

  • 在没有访问jsp1的情况下访问jsp2时好像没有这个属性...
  • 如果您使用&lt;jsp:useBean 标签,请不要使用Scriptlet。如果您使用的是 Scriptlets,请不要使用 useBean 标记,而只需将您的 bean 放在会话中或直接使用 Scriptlets 请求属性。除了让事情变得混乱之外,为什么要将两者混为一谈?
  • 即使jsps在不同的时间初始化,你认为这会起作用吗?

标签: java jsp session servlets


【解决方案1】:

根据上述情况。因为 request 肯定会持有 session 对象。

你可以试试这个:-

<p style="display:block" >
    <%(String)request.getSession().getAttribute("allEmails"); %>
</p>

【讨论】:

  • 这对我来说非常有效,有没有其他方法可以工作,或者这是最干净的方法
【解决方案2】:

你想在这里传递的是一个字符串到会话范围内。 1)您不需要为此使用jsp useBean。您可以使用当前拥有的 scriptlet 在会话范围内直接设置。

要使用jsp useBean 标签,组件类的类型应该是JavaBean。您正在使用不可变的 String 类。 因此,您不能为要在 useBean 中使用的 String 设置任何属性。 不幸的是,当您使用

进行分配时,未捕获/未抛出脚本错误(不知道)
    String email = Emails;

为什么在你设置的时候它会起作用?

    session.setAttribute( "allEmail","hello world"); 

这和设置一样好:

    <%
        String email = "hello world";
        session.setAttribute( "allEmail",email);
    %>

如果您想在需要时传递一些字符串属性以及其他属性,请定义如下:

    public class YourBean implements java.io.Serializable
    {
       private String propertyName = null;

       public String getPropertyName(){
          return propertyName;
       }
       public void setPropertyName(String propertyName){
          this.propertyName = propertyName;
       }
    }

然后将属性设置为:

    <jsp:useBean id="yourBean" class="package.YourBean" scope="bean scope">
       <jsp:setProperty name="yourBean" property="propertyName"  value="value"/>
       ...........
    </jsp:useBean>

【讨论】:

    猜你喜欢
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多