webwork 中文乱码问题 表单字段验证 标签的用法
1.WebWork中文问题解决:
a)在webwork.properties文件中,添加:
webwork.i18n.encoding=UTF-8
它主要是用来设置WebWorkUI标签库的编码,
要保持你的页面和编码与你在encoding设置的一致,否则重复编码出现乱码.
如果不设置它将通过System.getProperty("file.encoding"来获取默认字符编码。
PS:2.1.6版本中存在BUG,不能够使用定义的encoding.
b)写一个Filter,将编码设置为UTF-8。
例如SetCharacterEncodingFilter。它解决Action数据传递时的编码,但是不能解决属性在Action或是Model赋值的编码.
c)velocity.properties文件中,添加:
input.encoding=UTF-8
output.encoding=UTF-8
default.contentType=text/html;charset=UTF-8
它是用来设置.vm页面的编码方式.
d)使用freemarker作为view层,可以再web.xml中指定字符属性;
<servlet>
<servlet-name>freemarker</servlet-name>
<servlet-class>com.opensymphony.webwork.views.freemarker.FreemarkerServlet</servlet-class>
<!--FreemarkerServletsettings:-->
<init-param>
<param-name>TemplatePath</param-name>
<param-value>/templates/</param-value>
</init-param>
<init-param>
<param-name>NoCache</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>ContentType</param-name>
<param-value>text/html</param-value>
</init-param>
<!--指定编码-->
<init-param>
<param-name>default_encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>number_format</param-name>
<param-value>0.##########</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
2.WebWork表单字段验证:
a)Action必须继承ActionSurport;
b)在xwork.xml文件必须定义
<actionname="hello"class="test.HelloAction">
<resultname="success">/result.jsp</result>
<resultname="input">
<paramvalue="/location">/index.jsp</param>
</result>
<interceptor-refname="validationWorkflowStack"/>
</action>
其中input是必须定义的,另外要使用
<paramvalue="location">/index.jsp</param>
才可以在验证错误后回到输入页面。
c)在Action类名-validation.xml文件必须与Action类在同一目录下,
d)定义的<message/>元素,当提示消息为中文时候必须在文件头定义:
<?xmlversion="1.0"encoding="GBK"?>
3.WebWork的标签的用法:
a)需要提交的表单项name属性值均为常量,因此均以单引号包围,以与Model中的变量相匹配,
<ww:formnamespace="'/test'"action="'ftltest'"method="'POST'">
<ww:textfieldname="'msg'"label="消息"></ww:textfield>
<ww:submitvalue="/提交"/>
</ww:form>
b)<ww:radio/>和<ww:select/>标签中的list的属性可以使用Map类型,以key和value对应listKey,listValue属性.
第一种写法:
<ww:selectlabel="'Months'"
name="'months'"
list="#{'01':'Jan','02':'Feb',[]}"
value="/01"
required="true"
/>
第二种写法:
<ww:selectlabel="'Pets'"
name="'petIds'"
list="petDao.pets"
listKey="id"
listValue="name"
multiple="true"
size="3"
required="true"
/>
<!--petDao.pets为普通对象,使用其id为KEY,name为value-->
<!--如果petDao.pets为Map类型,则可省略listKey和listValue属性-->
c)WebWork2中的UI标签的模板定制,可以在webwork.properties文件中指定相关属性,并且定制模板文件;
webwork.ui.theme=xhtml//可用的theme还有simple;
webwork.ui.templateDir=template//模板路径;
#setsthedefaulttemplatetype.Eithervmorjsp
webwork.ui.templateSuffix=vm//模板类型,还支持JSP模板,开发可以使用FreeMarker定制模板;
4.WebWork的国际化使用:
a)<ww:i18name="'message'">
<ww:textname="'key'"/>
</ww:i18>
使用message_zh_CN.properties中包含key=****;
b)在Action中的getText()方法资源来自Action的类名.properties
c)在Action中可以使用getTexts()获得具体的ResourceBundle;
d)在view层一样可以使用getText()方法;
<ww:i18nname="'messages'">
<!--在messages.properties文件中有key->index_msg-->
<wwpropertyvalue="getText('index_msg')"/>
</ww:i18n>