﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-每天学习8小时！-随笔分类-think in struts</title><link>http://www.blogjava.net/tij/category/31206.html</link><description>本BLOG文章全部来自互联网，版权归原作者所有。</description><language>zh-cn</language><lastBuildDate>Sun, 04 May 2008 08:14:52 GMT</lastBuildDate><pubDate>Sun, 04 May 2008 08:14:52 GMT</pubDate><ttl>60</ttl><item><title>MessageResources</title><link>http://www.blogjava.net/tij/archive/2008/05/04/198115.html</link><dc:creator>天堂一定是图书馆的样子</dc:creator><author>天堂一定是图书馆的样子</author><pubDate>Sun, 04 May 2008 07:35:00 GMT</pubDate><guid>http://www.blogjava.net/tij/archive/2008/05/04/198115.html</guid><wfw:comment>http://www.blogjava.net/tij/comments/198115.html</wfw:comment><comments>http://www.blogjava.net/tij/archive/2008/05/04/198115.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tij/comments/commentRss/198115.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tij/services/trackbacks/198115.html</trackback:ping><description><![CDATA[<p>1.usage of MessageResources</p>
<p>import org.apache.struts.util.MessageResources;</p>
<p>MessageResources messages =MessageResources.getMessageResources("cn/edu/ouc/ky2/ApplicationResources"); </p>
<p>messages.getMessage("experts.MAJOR_NAME")</p>
<p>2.普通的java类,这样更为通用一些</p>
<p>MessageResources resources =(MessageResources) pageContext.getServletContext().getAttribute(Globals.MESSAGES_KEY);<br />
out.println(resources.getMessage("experts.MAJOR_NAME"));<br />
<br />
</p>
<div class="blog_content">MessageResources&nbsp;messages&nbsp;=&nbsp;getResources(request);<br />
<br />
在Action类中定义了getResources(HttpServletRequest&nbsp;request)方法，该方法返回当前默认的MessageResources对象，它封装了Resource&nbsp;Bundle中的文本内容。接下来Action类就可以通过MessageResources对象来访问文本内容。例如，如果要读取消息key为&#8220;hello.jsp.title&#8221;对应的文本内容，可以调用MessageResources类的getMessage(String&nbsp;key)方法：<br />
String&nbsp;title=messages.getMessage("hello.jsp.title"); </div>
<img src ="http://www.blogjava.net/tij/aggbug/198115.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tij/" target="_blank">天堂一定是图书馆的样子</a> 2008-05-04 15:35 <a href="http://www.blogjava.net/tij/archive/2008/05/04/198115.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>actionMessages()，actionError()介绍</title><link>http://www.blogjava.net/tij/archive/2008/05/04/198077.html</link><dc:creator>天堂一定是图书馆的样子</dc:creator><author>天堂一定是图书馆的样子</author><pubDate>Sun, 04 May 2008 07:00:00 GMT</pubDate><guid>http://www.blogjava.net/tij/archive/2008/05/04/198077.html</guid><wfw:comment>http://www.blogjava.net/tij/comments/198077.html</wfw:comment><comments>http://www.blogjava.net/tij/archive/2008/05/04/198077.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/tij/comments/commentRss/198077.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tij/services/trackbacks/198077.html</trackback:ping><description><![CDATA[<p>尽管Struts框架提供了有效的异常处理机制，但不能保证处理所有的错误，这时Struts框架会把错误抛给Web容器，在默认情况下Web容器会向用户浏览器直接返回原始信息。如果想避免直接让用户看到这些原始信息，可以在web.xml中配置&lt;error-page&gt;元素，以下代码演示了如何避免用户看到HTTP 404、HTTP 500错误和Exception异常。<br />
<br />
web.xml:<br />
&nbsp; &lt;error-page&gt;<br />
&nbsp; &nbsp; &lt;error-code&gt;404&lt;/error-code&gt;<br />
&nbsp; &nbsp; &lt;location&gt;/exception/error404.jsp&lt;/location&gt;<br />
&nbsp; &lt;/error-page&gt;<br />
&nbsp; &lt;error-page&gt;<br />
&nbsp; &nbsp; &lt;error-code&gt;500&lt;/error-code&gt;<br />
&nbsp; &nbsp; &lt;location&gt;/exception/error500.jsp&lt;/location&gt;<br />
&nbsp; &lt;/error-page&gt;<br />
&nbsp; &lt;error-page&gt;<br />
&nbsp; &nbsp; &lt;exception-type&gt;java.lang.Exception&lt;/exception-type&gt;<br />
&nbsp; &nbsp; &lt;location&gt;/exception/default.jsp&lt;/location&gt;<br />
&nbsp; &lt;/error-page&gt;<br />
当WEB容器捕获到exception-type或error-code指定的错误时将跳到由location指定的页面。<br />
<br />
 问题：当form bean 为动态bean时，在action中无法对form bean数据进行验证，因为formbean没有具体实现类。action中无法引用<br />
 ActionError/ActionErrors/ActionMessage/ActionMessages:<br />
<br />
有时候你需要向用户提供相关处理信息，包括表单验证时发现错误等。<br />
1. 相关类介绍：<br />
ActionMessage：用于保存一个与资源束对应的提示信息。主要构造函数如：<br />
ActionMessage(String message)；<br />
ActionMessage(String message,paramater)。<br />
<br />
ActionMessages:用于保存多个ActionMessage。并在html:errors 和html:messages中起作用。<br />
主要构造函数：<br />
ActionMessages().<br />
主要方法是add(String property,ActionMessage message)<br />
ActionMessages有一个HashMap类型messages保存多个ActionMessage对象，每个ActionMessage对象都有唯一的一个property标识。这个property可以是自定义的任意字符串，也可以由org.apache.struts.action.ActionMessages.GLOBAL_MESSAGE指定<br />
html:messages/html:errors使用property属性访问某个资源<br />
<br />
ActionErrors：用于保存一个与资源束对应的错误信息。用法跟ActionMessages差不多。<br />
ActionError不赞成使用。<br />
<br />
<br />
2. 版本：<br />
struts1.1中用ActionErrors报告错误，用ActionMessages提供信息。<br />
在struts1.2中使用ActionMessages提供信息和错误，不赞成使用ActionError<br />
struts1.3中已经没有ActionError类了。<br />
<br />
3． AtionErrors和ActionMessages的区别<br />
<br />
1． ActionErrors是ActionMessages的一个子类，功能几乎相同，不同点在于标签&lt;html:errors/&gt;和&lt;html:messages&gt;的使用上的区别。<br />
html:errors指定了footer和header属性。默认值为errors.header和errors.footer,需要时可以自己指定。如果资源属性文件配置了 errors.header和errors.footer，则任何时候使用html:errors时开头和结尾都是这两个属性对应的资源信息。<br />
而html:message默认情况下没有errors.header和errors.footer值，当然可以自己指定。<br />
<br />
2． html:errors可以根据property属性指定显示一个错误信息。html:messages有一个必添项id。html:messages不能直接显示信息，它将选出的信息放入一个用id标识的Iterator对象里，然后在用ben:write或JSTL c:out标签显示每个信息.例如：<br />
&lt;html:messages message="true" id="msg"&gt;<br />
&nbsp; &nbsp; &lt;c:out value="${msg}"/&gt;&lt;br /&gt;<br />
&lt;/html:messages&gt;<br />
<br />
3. 具体的一个例子：<br />
接受输入页面input.jsp:<br />
<br />
&nbsp; &lt;html:form action="/errormessage/input"&gt;<br />
&nbsp; &nbsp; phoneNumber : &lt;html:text property="phoneNumber"/&gt; &lt;html:errors &nbsp; &nbsp; property="&lt;%=org.apache.struts.action.ActionMessages.GLOBAL_MESSAGE %&gt;"/&gt;&lt;br/&gt;<br />
&nbsp; &lt;html:submit/&gt;&lt;html:cancel/&gt;<br />
&nbsp; &lt;/html:form&gt;<br />
<br />
struts-config.xml:<br />
&nbsp; &lt;form-beans &gt;<br />
&nbsp; &nbsp; &lt;form-bean name="inputForm" type="cn.rolia.struts.form.errorexception.InputForm" /&gt;<br />
&nbsp; &lt;/form-beans&gt;<br />
&nbsp; &lt;action-mappings &gt;<br />
&nbsp; &nbsp; &lt;action<br />
&nbsp; &nbsp; &nbsp; attribute="inputForm"<br />
&nbsp; &nbsp; &nbsp; input="/errormessage/input.jsp"<br />
&nbsp; &nbsp; &nbsp; name="inputForm"<br />
&nbsp; &nbsp; &nbsp; path="/errormessage/input"<br />
&nbsp; &nbsp; &nbsp; scope="request"<br />
&nbsp; &nbsp; &nbsp; type="com.yourcompany.struts.action.errormessage.InputAction"<br />
&nbsp; &nbsp; &nbsp; validate="false"&gt;<br />
&nbsp; &nbsp; &nbsp; &lt;forward name="success" path="/errormessage/success.jsp" /&gt;<br />
&nbsp; &nbsp; &lt;/action&gt;<br />
&nbsp; &lt;/action-mappings&gt;<br />
<br />
InputAction.java:<br />
<br />
public ActionForward execute(ActionMapping mapping, ActionForm form,<br />
&nbsp; &nbsp; HttpServletRequest request, HttpServletResponse response) {<br />
&nbsp; cn.rolia.struts.form.errorexception.InputForm inputForm = (cn.rolia.struts.form.errorexception.InputForm) form;// TODO Auto-generated method stub<br />
&nbsp; String phoneNumber = inputForm.getPhoneNumber();<br />
&nbsp; if(phoneNumber.length()&lt;4){<br />
&nbsp; ActionErrors messages = new ActionErrors();<br />
&nbsp; &nbsp; messages.add(org.apache.struts.action.ActionMessages.GLOBAL_MESSAGE,new ActionMessage("error.errormessage.input"));<br />
&nbsp; &nbsp; this.saveErrors(request, messages);<br />
&nbsp; &nbsp; return mapping.getInputForward();<br />
&nbsp; }<br />
<br />
&nbsp; return mapping.findForward("success");<br />
}<br />
解说：用户输入手机号码，页面跳转到InputAction控制层进行处理，若输入数据小于4，则创建一个ActionMessage类存储相关错误信息。然后再创建ActionErrors类将此ActionMessage放入ActionErrors。再调用Action的saveErrors方法将此ActionErrors保存的request范围里，然后返回input.jsp页面要求重新输入并用html:errors提示错误信息。<br />
<br />
4. Action包含saveErrors()方法和saveMessages()方法。如果创建的ActionErrors则应该调用saveErrors()，若创建的是ActionMessages则应该调用saveMessages()方法。<br />
saveErrors()接收ActionMessages而不是ActionErrors;同时将其保存在request中并用一个由org.apache.struts.Globals.ERROR_KEY指定的常量&#8221; org.apache.struts.Globals.ERROR_KEY&#8221;标识这个ActionMessages，便于html:errors查找。saveMessages()方法接收ActionMessages同时将其保存在request中并用一个由org.apache.struts.Globals.MESSAGE_KEY指定的常量&#8221; org.apache.struts.Globals.MESSAGE_KEY&#8221;标识这个ActionMessages，进而让html:messages从常量Globals.ERROR_KEY中遍历获取信息。可以将其属性message设置为true，那么它将从常量Globals.MESSAGE_KEY中遍历获取信息。<br />
<br />
5. 默认情况下html:messages从<br />
如果你想将信息保存在session里而不是request，struts1.2提供了<br />
struts1.1没有的saveMessages(HttpSession session, ActionMessages messages)方法和saveErrors(javax.servlet.http.HttpSession session, ActionMessages errors)方法。<br />
InputAction.java:<br />
<br />
public ActionForward execute(ActionMapping mapping, ActionForm form,<br />
&nbsp; &nbsp; HttpServletRequest request, HttpServletResponse response) {<br />
cn.rolia.struts.form.errorexception.InputForm inputForm = (cn.rolia.struts.form.errorexception.InputForm) form;// TODO Auto-generated method stub<br />
&nbsp; String phoneNumber = inputForm.getPhoneNumber();<br />
&nbsp; if(phoneNumber.length()&lt;4){<br />
&nbsp; &nbsp; ActionErrors messages = new ActionErrors();<br />
&nbsp; &nbsp; messages.add(org.apache.struts.action.ActionMessages.GLOBAL_MESSAGE,new ActionMessage("error.errormessage.input"));<br />
&nbsp; &nbsp; this.saveErrors(request.getSession(true), messages);<br />
&nbsp; &nbsp; return mapping.getInputForward();<br />
&nbsp; }<br />
<br />
&nbsp; return mapping.findForward("success");<br />
} </p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/tij/aggbug/198077.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tij/" target="_blank">天堂一定是图书馆的样子</a> 2008-05-04 15:00 <a href="http://www.blogjava.net/tij/archive/2008/05/04/198077.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>