如何在视图Bean中获取JSP请求和响应

时间:2012-08-16 08:35:46

标签: java jsp

我想从JSP中删除scriplets。 在我的JSP中,我有一个scriplet

<%response.setContentType("text/xml");%>

我创建了一个视图bean 并创建了一个属性HttpServletResponse response 并为此属性添加了getter / setter。

当我尝试在ViewBean中获得回复时,它会以null的形式出现。 有关如何避免此问题的任何建议NullPointerException

我的JSP代码是:

<jsp:useBean id="test" class="someBean" />
<jsp:setProperty name="test" property="*" />
<jsp:getProperty name="test" property="response" />

ViewBean代码是:

package test.here;

import java.sql.*;
import java.util.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.ibm.commerce.server.WcsApp;
import com.ibm.commerce.server.JSPHelper;

public class SomeBean {
    String punchOutRes = null;
    HttpServletResponse response;
    HttpServletRequest request;
    String test="Hello";
    public HttpServletResponse getResponse() {
        return response;
    }

    public void setResponse(HttpServletResponse response) {
        this.response = response;
    }

    public HttpServletRequest getRequest() {
        return request;
    }

    public void setRequest(HttpServletRequest request) {
        this.request = request;
    }

    public String getPunchOutRes() {    

           response.setContentType("text/xml");
           return "testing";       
    }
    public String getTest(){    
    }

}

2 个答案:

答案 0 :(得分:0)

您可以使用page指令摆脱上面的scriptlet:

<%@ page contentType="text/xml;charset=ISO-8859-1" %>

通常,您的bean代码应包含任何特定于servlet的信息。

在servlet中使用:

request.setAttribute("test", myBean);
request.getRequestDispatcher("page.jsp").forward(request, response);

在JSP中使用:

${test.foo}

其中foo显示为

public String getFoo() {
    return foo;
}

在bean类中。

答案 1 :(得分:0)

首先,在实例化bean时,您应该引用java bean类的完整限定名称(即包名称加上类名),如下所示:

<jsp:useBean id="test" class="test.here.SomeBean" />

另一方面,<jsp:setProperty property="*" />文档说明如下:

  

存储请求对象参数中的所有值(称为   匹配Bean属性中的请求参数。该物业名称在   Bean必须与请求参数匹配。参数名称   通常来自HTML表单的元素,值来   来自用户输入的数据。

     

请求参数的值始终为String类型。该   字符串值将转换为其他数据类型,以便存储它们   在Bean属性中。允许的Bean属性类型及其属性   转换方法如表1-1所示。

关于注入隐式对象 的解释中没有任何内容(请求和响应是隐式JSP对象,而不是请求参数),你不应该在bean代码中使用任何这些对象

如果您只想设置内容类型,请使用JSP指令:

<%@ page contentType="text/xml;charset=ISO-8859-1" %>

但是如果你想进行更复杂的操作,那么你应该使用Servlet或Filter。