Session属性未反映在JSP中

时间:2014-04-07 17:37:09

标签: java jsp session servlets

所以我有一个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中的<p>正确填充了数据,但我的第二个jsp中的段落只是空白

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

我做错了什么?

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

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

我认为问题是jsp是同时初始化的,所以第二个jsp中的会话没有任何价值。

2 个答案:

答案 0 :(得分:0)

您想要传递的是会话范围内的字符串。 1)你不需要jsp useBean。您可以直接使用当前的scriptlet设置会话范围。

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

分配时,没有捕获/不抛出scriptlet错误(不知道)
    String email = Emails;

为什么它在设置时有效?

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

这与设置一样好:

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

如果要根据需要传递一些String属性以及其他属性,请定义如下:

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

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

然后将property设置为:

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

答案 1 :(得分:0)

根据上述情况。由于请求肯定会保存会话对象。

你可以试试这个: -

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