Как установить свойство, используя set property и param в 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, Как получить правильное значение?

1 ответ

Проблема в том, что вы явно поставили enctype="multipart/form-data" в вашем определении формы. Это не по умолчанию, и позволяет загружать файлы на сервер.

К сожалению, его нельзя использовать для простого декодирования параметров JSP.

Если вам не нужно загружать файлы, просто напишите

<form id="form1" name="form1" action="save.jsp" method="POST">
<input required="" type="text" name="nam">
...

в вашем get.jspи все должно идти хорошо. Если вам действительно нужно загружать файлы, вам нужно будет декодировать параметры в сервлете, но это был бы совсем другой вопрос...

Редактировать: как получить составную часть в сервлетах

Для оставшейся части ответа я предполагаю, что вы используете как минимум сервлет 3.0 api и совместимый контейнер (как минимум Tomcat 7)

Расшифровать multipart/form-dataвам нужно будет объявить сервлет с элементом или аннотацией multipart-config и использовать его в качестве действия формы (скажем, его 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">
...

Вы объявляете сервлет таким образом (используя аннотации):

@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);
    }
}

Обратите внимание, что сервлет переадресует ваш исходный файл JSP, который теперь может найти параметр запроса, поскольку он был декодирован из составной части сервлетом. Но ИМХО, вам лучше сделать всю обработку в сервлете (вызов ac1.createAccount(request);) и используйте JSP для отображения результатов.

Другие вопросы по тегам