Как установить свойство, используя 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 для отображения результатов.