0

我想使用 bean 设置属性<jsp:setProperty>并使用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. 如何获得正确的价值?

4

1 回答 1

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)

要 decode 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 从多部分解码。但是恕我直言,您最好在 servlet 中进行所有处理(调用ac1.createAccount(request);)并使用 JSP 来显示结果。

于 2014-10-11T15:22:41.683 回答