Struts2的标签直接引用Properties文件的属性,我们可以把页面一些共用的属性,统一配置到一个Properties属性中,方便统一修改维护,但是,要引用时需要注意一些问题,本文就遇到的问题一一道来。
先看效果图:
先定义一个global.properties文件,如下:
#global message
login.username = 用户名
login.password = 密码
login.submit = 提交
创建login.jsp文件:
<s:form action="/user/checkUser.action">
<s:textfield key="login.username" name="username" ></s:textfield>
<!--name + label方式 -->
<!--<s:password name="password" label="Password"></s:password>-->
<s:password key="login.password" name="password"></s:password>
<s:submit key="login.submit" name="submit"></s:submit>
</s:form>
可以看到下划线的属性是直接引用的global.properties中的属性
Struts.xml的配置文件:
<package name="user" namespace="/user" extends="struts-default">
<action name="login">
<result>/login.jsp</result>
</action>
<action name="checkUser" class="com.struts2.action.error.LoginCheckAction">
<result name="success">/welcome.jsp</result>
<result name="input">/login.jsp</result>
</action>
</package>
上面的方式还需要注意一点,就是properties文件与action文件不在同一个目录下,这时需要在Struts.xml文件添加自定义的资源配置
<!-- 自定义的资源 -->
<constant name="struts.custom.i18n.resources" value="global"></constant>
LoginCheckAction.properties:
#Welcome message
welcome.hello = 您好
Welcome.jsp文件:
<body>
<s:if test="hasActionMessages()">
<div class="welcome">
<s:actionmessage/>
</div>
</s:if>
<h1>欢迎:</h1><br>
<s:property value="getText('welcome.hello')"/>
<s:property value="username"/>
</body>
总结:
1、 定义的properties文件与action文件不在同一个包下,需要在Struts.xml中配置自定义properties文件的资源名称,如果在同一个包下,虽然不需要再struts.xml中配置自定义资源,但是.properties文件与.java文件的名称必须相同
2.在同一个包下,如果在.jsp文件中需要用到.properties文件的属性,那么这个.jsp文件必须是通过该.action的result跳转过来的。