当您单击超链接时,不会为请求URL提供参数
username和
password(参数不是由
params拦截器设置的),因此此属性的值是,
null但是在
validate()执行操作之前调用了该方法,因为您的操作扩展
ActionSupport了实现
Validateable和
ValidationAware允许
validation拦截器(这是的一部分
defaultStack)执行
validate()方法,其中,你可以执行手动检查和提供
ActionErrors,
FieldErrors和
ActionMessages。但是,如果您不提供属性的值,则没有理由这样做。您应该提交表单或在url中设置参数,例如
<a id="mylink" href="#">Click for New User</a><script type="text/javascript>$(document).ready(function(){ $('#mylink').click(function(e) { window.location="<s:url action='register'/>"+"?username="+$('username').val()+"&password="+$('password').val(); return false; });});</script>但是问题在于参数值(用户名和密码)是敏感信息,不应传递到URL中。并且您应该使用Ajax
post或通过
POST请求提交表单,如本示例所示。
使用手动验证时,使用Apache Commons验证器非常有用
if (GenericValidator.isBlankOrNull(value)) addFieldError("FieldLabel", MessageFormat.format(getText("ErrorKey"), getText("FieldLabel"), new Object {}));可以为
ActionErrors和/或完成类似的代码
ActionMessages。commons-
validator包中还提供了其他验证器,或者您可以使用超出此问题的Struts2验证器。



