Например, у меня есть следующее:
struts.xml:
<action name="personForm">
<result>/jsp/personForm.jsp</result>
</action>
<action name="savePerson">
<result>/jsp/successSave.jsp</result>
<result name="input">/jsp/personForm.jsp</result>
</action>
<action name="countries">
<result>/jsp/countries.jsp</result>
</action>
personForm.jsp:
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:form action="savePerson">
<s:textfield name="firstName" label="First Name" />
<s:textfield name="lastName" label="Last Name" />
<s:action name="countries" executeResult="true" />
<s:submit />
</s:form>
CountriesAction.java:
public class CountriesAction extends ActionSupport {
public String execute() {
countries = getCountries();
return SUCCESS;
}
private Map<String, String> getCountries() {
...
}
private Map<String, String> countries;
}
countries.jsp:
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:select name="countryId" label="Countries" list="countries"
headerKey="-1" headerValue="Please select the country ..."/>
SavePerson.action
public class SavePerson extends ActionSupport {
public void validate() {
if (firstName == "") {
addFieldError(firstName, "First Name is required.");
}
if (lastName == "") {
addFieldError(lastName, "Last Name is required.");
}
if (countryId == "-1") {
addFieldError(countryId, "Country is required.");
}
}
public String execute() {
//get the properties and save the person...
return SUCCESS;
}
private String firstName;
private String lastName;
private String countryId;
//corresponding setters and getters..
}
Когда я отправляю форму, и, например, возникает ошибка проверки, допустим, мы не заполнили никаких данных, поэтому поля ввода 'firstName' и 'lastName' будут иметь соответствующее сообщение рядом с ними. Но это не относится к списку выбора страны, хотя есть ошибки действий, которые не будут отображаться.
Я считаю, что это происходит потому, что родительское действие, которое представляет собой SavePerson, является тем, кто добавил ошибки (addFieldErrors), но когда вызывается другое действие Страны (то, которое заполняет список), то эти ошибки не доступны в этом контексте, потому что если я вызову hasErrors () в этом действии, это будет «ложь», поэтому, когда входные данные будут обработаны, и проверим, есть ли какие-либо ошибки для отображения сообщения, вызовет hasErrors и вернет false, чтобы сообщения об ошибках не отображались.
Этот подход вызова другого действия просто для рендеринга других элементов управления вводом является одним из способов, которые часто задаваемые вопросы Struts 2 предлагают сделать для этого:
http://struts.apache.org/2.2.1/docs/how-do-we-repopulate-controls-when-validation-fails.html
Так как я могу сделать так, чтобы эти элементы управления этими действиями отображали ошибки действия из его родительского действия.
Есть мысли?
Заранее спасибо