使用Java Bean时的会话范围问题

时间:2009-03-28 09:32:32

标签: jsp

FIRST.JSP

<jsp:useBean id="Bean" scope="session" class="Bean.Student_Enrollment_Bean" />
<jsp:setProperty name="Bean" property="*"/>

<tr>
    <td >Student First Name</td>
    <td>
    <% if( (Bean.getStudent_first_name()==null) || (Bean.getStudent_first_name().trim().length()==0) || Bean.getStudent_first_name().equals("null"))  {  %>
        <input type="text" name="student_first_name" >
    <% } else { %>
        <input type="text" name="student_first_name" value="<%=Bean.getStudent_first_name()%>">
    <%  } %>
    </td>
</tr>   

SECOND.JSP

<jsp:useBean id="Bean" scope="session" class="Bean.Student_Enrollment_Bean" />
<jsp:setProperty name="Bean" property="*"/>

<tr> 
    <td >SSLC Name</td>
    <td>
    <% if( (Bean.getName_sslc()==null) || (Bean.getName_sslc().trim().length()==0) || Bean.getName_sslc().equals("null"))  {  %>
        <input type="text" name="name_sslc">
    <% } else { %>
        <input type="text" name="name_sslc" value="<%=Bean.getName_sslc()%>">
    <%  } %>
    </td> 
</tr>

JAVABEAN.JAVA

public class Student_Enrollment_Bean 
{

    private String student_first_name="";
    private String name_sslc;


    public String getStudent_first_name() {
        return student_first_name;
    }

    public void setStudent_first_name(String student_first_name) {
        this.student_first_name = student_first_name;
    }


    public String getName_sslc() {
        return name_sslc;
    }

    public void setName_sslc(String name_sslc) {
        this.name_sslc = name_sslc;
    }

}

大家以上是我的代码.....我有jsp会话范围的问题.....在第一页我输入名称作为“名字”然后我要去第二页,在这个页面我 输入学校名称作为“学校名称”....现在我要回到第一页,在这(第一)页面中,值(“名字”)在文本框中出现我输入的内容...现在我删除价值,我离开了 文本字段为空白,我将转到第二页,然后返回到第一页...这里现在我只想要空白文本字段....但它显示我第一次输入的值(“名字”) 。 请告诉我代码背后的问题是什么以及在哪里。

我不希望通过设置为隐藏变量或session.setAttribute来构建逻辑。请告诉我任何其他解决方案。为什么bean没有得到空字符串的值....?

提前致谢....

2 个答案:

答案 0 :(得分:0)

您只在两个页面中使用输入标记,而不实际使用表单标记来清楚地定义应用程序在用户填写文本字段时应采取的操作。

我的建议是搜索谷歌如何使用JSP和表单。您的JSP页面不需要像解决方案那样 if scriptlet。

参见例如http://www.jsptut.com/Forms.jsp

答案 1 :(得分:0)

功能要求非常不清楚,所以我不能给出一个很好的答案。

但我可以看到你已经宣布jsp:useBean自己使用会话范围。这是实际问题。您似乎希望保持数据请求作用域。在这种情况下,只需将范围更改为request。您已经将jsp:setPropertyproperty="*"一起使用,这将根据属性名称自动将请求参数放入bean中。只要明智地使用它。此外,我建议使用Expression Language而不是那些afwul scriptlet。

E.g。

<input type="text" name="student_first_name" value="${Bean.student_first_name}">

然后在second.jsp中将其作为隐藏参数传递:

<input type="hidden" name="student_first_name" value="${Bean.student_first_name}">

这就是全部。不,当实际值为null时,它不会打印null。那是EL的好东西。

那就是说,我建议删除那些PHP / C命名约定并使用真正的Java naming conventions。变量不应该以大写字母开头,你应该使用CamelCase。