近些天看到好多朋友开始研究Struts自带例子,并且出现了好多问题。我也回了不少帖,但是问题量是有增不减,于是决定写个介绍。介绍的不是很详细,主要针对帖子的各个问题点。
JSP画面
registration.jsp
registration.jsp用的是客户端校验。
form:
<html:form action="/saveRegistration"
οnsubmit="return validateRegistrationForm(this);">
代码的后面有:
<html:javascript formName="registrationForm"
dynamicJavascript="true"
staticJavascript="false"/>
html:form 标签中的validateRegistrationForm(this)是和formName 的值(registrationForm)对应的。
formName registrationForm必须与 struts-config.xml 和validation.xml 文件中的表单名称相匹配。
struts-config.xml中可以看到registrationForm的type是org.apache.struts.validator.DynaValidatorForm。DynaValidatorForm是struts的一个from类,你只需要在struts-config.xml中定义from的form-property即可。
validation.xml中配置相应的校验要求,校验规则在validator-rules.xml中定义。RegistrationForm用的几个校验都是struts自带的,我们也可以自己定义(以后有时间的话我打算讲讲这个)。
html:javascript中的dynamicJavascript="true" staticJavascript="false"
是实施动态JavaScript脚本,不实施静态JavaScript脚本。
然后就引入了staticJavascript.jsp,在这个jsp画面中有
<html:javascript dynamicJavascript="false" staticJavascript="true"/>
把参数进行了恢复,不实施动态JavaScript脚本,实施静态JavaScript脚本。
以subscription.jsp为例,介绍一下服务器端校验,资源绑定和国际化。
subscription.jsp
subscription.jsp用的是服务器端校验。
subscription.jsp画面中的subscriptionForm对应的action为saveSubscription。
在subscriptionForm中有一个校验函数validate。
validate函数分别对host,username,password,type进行了校验。假如有错误就生成相应的ActionError,然后放到一个ActionErrors对象中,最后返回这个对象。
资源绑定:
介绍一下ActionError中用到的错误信息error.host.required,它被保存到资源文件中。资源文件有几个ApplicationResources.properties,ApplicationResources_ja.properties,ApplicationResources_ru.properties。
假如你的IE默认语言是英文,你访问的时候ActionServlet会到ApplicationResources.properties这个文件里取需要的信息,假如你的IE默认语言是日文,当你访问的时候ActionServlet会到ApplicationResources_ja.properties文件里取需要的信息。假如你的默认语言是中文,ActionServlet找不到对应的资源文件,它就用ApplicationResources.properties这个英文的了。
资源绑定还支持国际化(i18n - 在 i 和 n 之间有 18 个字符)。你可以为 ISO 语言代码为 xx 的其他语言创建 ApplicationResources_xx.properties。
资源文件里除了英文以外,中文和日文等都需要用java自带的native2ascii.exe进行转码才可以使用。