【发布时间】:2010-10-28 17:18:42
【问题描述】:
例如,我有以下内容:
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 FAQS 告诉这样做的方法之一: http://struts.apache.org/2.2.1/docs/how-do-we-repopulate-controls-when-validation-fails.html
那么我怎样才能使这些操作上的控件呈现来自其父操作的操作错误。
有什么想法吗?
提前谢谢你
【问题讨论】:
标签: java struts2 validation