【问题标题】:unable to set attributes in requests in JSP/servlets - Java?无法在 JSP/servlet 中的请求中设置属性 - Java?
【发布时间】:2014-07-10 00:07:04
【问题描述】:

以下是我在 jsps 代码中遵循的步骤: 1) 登录页面并将其发布到 servlet。

2) 在 servlet 中,我正在设置一些请求属性并使用调度程序转发请求 到另一个设置 bean 属性。

3) bean设置属性并转发到不同的url。

4) 在这个 url 中,我从请求中提取属性以显示在页面上。我从请求中得到一个null,表明我的属性未按请求设置。也就是下面的displayinfo.jsp 显示Welcome Null。为什么没有设置属性?

这是我的代码: Login page:

<form id="login" method="post" action="setBeansAllPropertiesLoginUser.do">  
    <span>UserName:</span><input name="uid" type="text" style="width:250px;" /> 
    <span>Password:</span><input name="pwd" type="password" style="width:250px;"/>
</form>

servlet:

@WebServlet("/setBeansAllPropertiesLoginUser.do")
public class SetBeansAllPropertiesLoginuser extends HttpServlet {

    public SetBeansAllPropertiesLoginuser() {
        super();
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String uid = request.getParameter("uid");
        String pwd = request.getParameter("pwd");

        request.setAttribute("userId", uid);
        request.setAttribute("password", pwd);
        //verify login details
        int authLevel = 1;

        String base = "setBean.jsp";
        /*
        String params = String.format("?userId=%s&password=%s&authLevel=%d"
                , uid, pwd, authLevel);
        */
        String dest = String.format("%s%s"
                        ,base
                        ,params);
        //RequestDispatcher rd = request.getRequestDispatcher(dest);
        RequestDispatcher rd = request.getRequestDispatcher(base);
        rd.forward(request, response);
    }

}

setBean.jsp

<table style="width:100%;">
        <tr>
            <td style="width:25%;height:80%;" valign="top">
                <jsp:include page="navbar.jsp" />
            </td>
            <td style="width:75%;height:80%;">
                <jsp:useBean id="wu" class="com.worldmanager.models.WebUser"
                    scope="request">
                    <jsp:setProperty name="wu" property="*" />
                </jsp:useBean>

                <jsp:forward page="displayinfo.jsp" />
            </td>
        </tr>
    </table>

displayinfo.jsp:

<table style="width:100%;">
        <tr>
            <td style="width:25%;height:80%;" valign="top">
                <jsp:include page="navbar.jsp" />
            </td>
            <td style="width:75%;height:80%;">
                <jsp:useBean id="wu" class="com.worldmanager.models.WebUser" scope="request"/>

                <h1>Welcome 
                    <jsp:getProperty name="wu" property="userId" />
                </h1>
            </td>
        </tr>
    </table>

我的bean 是正确的。我测试了它。上面我粘贴了相关的代码。代码不完整

【问题讨论】:

  • 我看不出该属性与wu bean 的userId 属性有何关系。你能澄清一下吗?
  • 在 setbean.jsp 中,我使用 wu bean 来设置 userId。在displayInfo.jsp 中,我尝试从 bean 中抽出..有意义吗?

标签: java jsp servlets request requestdispatcher


【解决方案1】:

只是改变

<jsp:getProperty name="wu" property="userId" />

<c:out value="${userId}" />

直接从请求属性中读取

通过使用&lt;jsp:getProperty&gt;,您正在请求wu.getUserId(),并且您尚未在可用范围内设置wu 的属性

或者

明确设置wu的属性

  <jsp:setProperty name="wu" property="userId"  value="${userId}"/>
  <jsp:setProperty name="wu" property="password"  value="${password}/>

并以与您现在相同的方式访问它

  <jsp:getProperty name="wu" property="userId" />

【讨论】:

  • 我在setBean.jsp 中设置属性。设置好后,我转发到displayinfo.jsp。我知道这非常令人困惑和复杂。但仅用于学习目的。
  • 你没有用正确的名字设置wu的属性
  • @brainstorm 如果您不想使用核心标签,请使用 JSP 容器并仅使用 JSP EL,例如 ${userId}
  • @Dave 在不信任其内容的情况下直接使用风险不大
  • 是的,你可以通过${param.paramName}在el中获取请求参数
【解决方案2】:

根据this,以下表示法

<jsp:setProperty name="wu" property="*" />

将根据请求参数名称检索和设置属性。所以从

改变你的请求参数
String uid = request.getParameter("uid");
String pwd = request.getParameter("pwd");

String uid = request.getParameter("userId");
String pwd = request.getParameter("password");

显然也要更改forminput 参数名称。

【讨论】:

  • 我知道我这样做的方式很复杂。但是如果您注意到,在 servlet 中,我从请求中获取这些参数,并在请求中设置新参数以获取要处理的 bean 的正确名称。这在理论上应该有效吗?
  • @brainstorm 不要混淆请求参数和请求属性。 setProperty 似乎得到了请求参数。您的名称与 bean 的属性名称不同。
  • 我对请求的参数和属性感到困惑。你纠正我说 setPropery 使用请求参数。我想没有办法设置 请求参数 并且可能没有用对吧?
  • @brainstorm 当您提交&lt;form&gt; 时,其元素将作为表单参数提交,servlet 容器将其转换为请求参数。只需适当地更改它们的名称,setProperty 元素就会正确检索它们,然后将它们设置在 bean 上。
  • 如果您在表单中添加另一个参数并且不打算使用新属性更新 bean 会发生什么?
猜你喜欢
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
  • 1970-01-01
  • 2014-06-22
  • 2015-04-18
相关资源
最近更新 更多