所以我有一个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中的会话没有任何价值。
答案 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>