您似乎误解了jsp:useBean
。
首先,您已声明该bean在会话范围内,并用当前请求的所有参数填充它。
<jsp:useBean id="user" class="com.hermes.data.RateCode_" scope="session">
<jsp:setProperty name="user" property="*"/>
</jsp:useBean>
因此,此bean作为名称存储为 会话 属性user
。您需要在servlet中将其作为会话属性而不是请求属性进行检索。
RateCode_ user = (RateCode_) request.getSession().getAttribute("user");
(user
顺便说rateCode
一下,这是一个可怕且令人困惑的属性名称,我将其重命名为其他名称,但_
最后没有这个奇数)
但是,它将不包含任何内容。在getCode()
与getDescription()
返回null
。在<jsp:setProperty>
已即没有 在你试图访问它在servlet这一点与所有请求参数填充它。仅当您将包含参数的请求转发回JSP页面时,才会这样做。但是,这发生在servlet中的业务逻辑之外。
您需要自己收集它们作为请求参数。首先 <jsp:useBean>
JSP中的全部内容,并在servlet的doPost()
方法中执行以下操作:
RateCode_ user = new RateCode_();
user.setCode(request.getParameter("code"));
user.setDescription(request.getParameter("description"));
// ...
request.setAttribute("user", user); // Do NOT store in session unless really necessary.
然后您可以在JSP中如下访问它:
<input type="text" name="code" value="${user.code}" />
<input type="text" name="description" value="${user.description}" />
(这仅对 XSS攻击敏感,您想安装JSTL并使用fn:escapeXml
)
不,你 需要<jsp:useBean>
在JSP中。保持现状,当您将MVC(第2级)方法与实际的servlet一起使用时,它几乎没有任何价值。该<jsp:useBean>
仅供MV设计(MVC1级)是有用的。要保存收集请求参数的样板代码,请考虑使用MVC框架或Apache Commons BeanUtils。另请参见以下链接以获取提示。