我在validate()方法中进行验证.
public void validate(){
if(continent.equals("-1")){
HttpServletRequest request=ServletActionContext.getRequest();
HttpSession session=request.getSession();
String s=(String)session.getAttribute("operation");
if(s.equals("edit"))
edit();
else if(s.equals("add"))
add();
addFieldError( "Continent", "Continent must be selected");
}
}
并在jsp(view)中添加了表单属性validate = true
<s:form action="add" name="aaa" cssClass="yy" method="post" validate="true">
<s:textfield name="Code" label="Code" readonly="false" cssClass="defaultTextBox"/>
<s:textfield name="Name" label="Name" cssClass="defaultTextBox"/>
<s:select name="Continent" label="Continent" headerKey="-1" headerValue="Select" list="continentlist" cssClass="defaultTextBox"/>
<s:textfield name="IndepYear" label="Independance Year" cssClass="defaultTextBox" />
<s:submit value="Save" cssClass="login login-submit" theme="simple"/>
</s:form>
但是只有服务器端验证有效.我的问题是->是否不可能使用validate()方法添加客户端验证?
解决方法:
在Struts 2中,Client Side Validation的含义不同,并且完全取决于您使用的theme的类型.
>使用XHTML(默认)和CSS XHTML,您可以使用
> Pure JavaScript Client Side Validation
那完全是基于Java的客户端,并且不与服务器通信.
>使用AJAX主题,您可以运行
它将与服务器联系,运行整个验证堆栈,并(为了回答您的问题)也运行您的validate()方法.
我个人更喜欢使用SIMPLE主题,完全由我自己处理HTML,CSS和JavaScript.
由于服务器端验证是强制性的,因此客户端验证仅被认为是多余的,有利于使页面更加用户友好,并减少高用户环境中的网络流量(您阻止了不成功-但合法-要求通过电线之前:)
考虑在jQuery上使用HTML5类型和后备功能,尤其是针对移动设备的情况.