如何使用bean中的setproperty和param设置属性

时间:2014-10-11 07:26:35

标签: java jsp javabeans params usebean

我想使用<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。如何获得正确的价值?

1 个答案:

答案 0 :(得分:0)

问题是您明确地将enctype="multipart/form-data"放在表单定义中。它不是默认设置,允许将文件上传到服务器。

不幸的是,它不能用于简单的JSP参数解码。

如果您不需要上传文件,请写下

<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来显示结果。