我想使用<jsp:setProperty>
在bean中设置属性,并使用param
分配值。
这是代码:
在 create.jsp :
中<form id="form1" name="form1" action="save.jsp" method="POST"
enctype="multipart/form-data">
<input required="" type="text" name="nam">
在 save.jsp :
<jsp:useBean class="jbeans.account.BankAccount" scope="request" id="ac1">
</jsp:useBean>
<jsp:setProperty name="ac1" property="accountHolderName" param = "nam">
</jsp:setProperty>
<%
ac1.createAccount(request); //createAccount is a public method.
//Recieving value of nam always as null
%>
在 jbeans.account.BankAccount.java :
public void setAccountHolderName(String accountHolderName) {
this.accountHolderName = accountHolderName;
}
当我在nam
文本框中输入值时,我收到的accountHolderName
的值始终为null
。如何获得正确的价值?
答案 0 :(得分:0)
问题是您明确地将enctype="multipart/form-data"
放在表单定义中。它不是默认设置,允许将文件上传到服务器。
如果您不需要上传文件,请写下
<form id="form1" name="form1" action="save.jsp" method="POST">
<input required="" type="text" name="nam">
...
在你的get.jsp
中,一切都会好起来的。如果你真的需要上传文件,你需要在servlet中解码参数,但那将是另一个问题......
编辑:如何在servlet中获取多部分
对于剩下的答案,我假设您至少使用servlet 3.0 api和兼容容器(至少Tomcat 7)
要解码multipart/form-data
,您必须使用multipart-config元素或注释声明一个servlet,并将其用作表单的操作(比如它的url是"/saver"
)。
<form id="form1" name="form1" action="${pageContext.request.contextPath}/saver"
method="POST" enctype="multipart/form-data">
<input required="" type="text" name="nam">
<input type="file" name="file">
...
以这种方式声明servlet(使用注释):
@WebServlet(name="saveServlet", urlPatterns="/saver")
@MultipartConfig
public class SaveServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// get an use the file part
Part part = req.getPart("file");
// ...
req.getRequestDispatcher("/save.jsp").forward(req, resp);
}
}
请注意,servlet转发到您现在可以找到请求参数的原始JSP文件,因为它已经由servlet从multipart解码。但是恕我直言,你最好在servlet中进行所有处理(调用ac1.createAccount(request);
)并使用JSP来显示结果。