Struts的资源绑定
在使用Struts时,我在我的struts-config.xml中配置了两个资源文件,如下:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEstruts-configPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration1.1//EN""http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<data-sources/>
<form-beans>
<form-beanname="loginForm"type="zy.pro.shd.controller.form.LoginForm"/>
</form-beans>
<global-exceptions/>
<global-forwards/>
<action-mappings>
<action
attribute="loginForm"
input="/web/user/loginForm.jsp"
name="loginForm"
path="/login"
scope="request"
type="zy.pro.shd.controller.action.LoginAction">
<forwardname="success"path="/web/user/loginResult.jsp"/>
<forwardname="failure"path="/web/user/loginResult.jsp"/>
</action>
</action-mappings>
<message-resourcesparameter="zy.pro.shd.res.ApplicationResources_en"/>
注意:这样就会出现错误,因为设定了两个默认资源。
</struts-config>
我在我的jsp页面中使用如下方式来访问我的资源文件
<body>
<br>
<ahref="web/user/loginForm.jsp"target="_blank">userlogin</a>
<br>
<bean:messagekey="user.login"/>
<bean:messagekey="user.go"/>
<br>
</body>
结果就出现了以下异常:
javax.servlet.ServletException:Missingmessageforkey"a.label"
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
org.apache.jsp.web.index_jsp._jspService(index_jsp.java:79)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
zy.pro.shd.filter.ChineseFilter.doFilter(ChineseFilter.java:51)
如果我们的资源设置如下:
<message-resourcesparameter="zy.pro.shd.res.ApplicationResources_en"/>
注意:这样,前者为默认,后者不是。
Locallocal=getLocal(request);
MessageResourcesmessage=getResources(request,”res1”);
Stringmsg=messages.getMessage(locale,”hello.no.username”);
这样,就可以访问res1中的信息了。
在使用Struts时,我在我的struts-config.xml中配置了两个资源文件,如下:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEstruts-configPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration1.1//EN""http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<data-sources/>
<form-beans>
<form-beanname="loginForm"type="zy.pro.shd.controller.form.LoginForm"/>
</form-beans>
<global-exceptions/>
<global-forwards/>
<action-mappings>
<action
attribute="loginForm"
input="/web/user/loginForm.jsp"
name="loginForm"
path="/login"
scope="request"
type="zy.pro.shd.controller.action.LoginAction">
<forwardname="success"path="/web/user/loginResult.jsp"/>
<forwardname="failure"path="/web/user/loginResult.jsp"/>
</action>
</action-mappings>
<message-resourcesparameter="zy.pro.shd.res.ApplicationResources_en"/>
<message-resourcesparameter="zy.pro.shd.res.ApplicationResources_en1"/>
注意:这样就会出现错误,因为设定了两个默认资源。
</struts-config>
我在我的jsp页面中使用如下方式来访问我的资源文件
<body>
<br>
<ahref="web/user/loginForm.jsp"target="_blank">userlogin</a>
<br>
<bean:messagekey="user.login"/>
<bean:messagekey="user.go"/>
<br>
</body>
结果就出现了以下异常:
javax.servlet.ServletException:Missingmessageforkey"a.label"
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
org.apache.jsp.web.index_jsp._jspService(index_jsp.java:79)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
zy.pro.shd.filter.ChineseFilter.doFilter(ChineseFilter.java:51)
如果我们的资源设置如下:
<message-resourcesparameter="zy.pro.shd.res.ApplicationResources_en"/>
<message-resourceskey=”res1”
parameter="zy.pro.shd.res.ApplicationResources_en1"/>
注意:这样,前者为默认,后者不是。记住:<message-resources/>配置的是默认资源。如果需要配置多个则需要设置其键值。
如果在程序(如在Action)中要访问另外的资源文件,可以使用如下办法:Locallocal=getLocal(request);
MessageResourcesmessage=getResources(request,”res1”);
Stringmsg=messages.getMessage(locale,”hello.no.username”);
这样,就可以访问res1中的信息了。