`

<html:messages> 标签小结

阅读更多

<html:messages> 标签小结

 

ActionMessages是Struts 1.1后所新增的类别,它变成了ActionErrors的父类别,同样的,ActionMessage也是Struts 1.1新增的类别,ActionError则已经不建议使用。

ActionMessages搭配Struts的<html:messages>标签,在管理讯息时就更为简易,以 伺服端表单验证 这篇为例,如果能使用ActionMessages搭配<html:messages>标签,那么讯息管理会很方便,例如 UserForm.java可以改为:

  • UserForm.java
package onlyfun.caterpillar;
 
import javax.servlet.http.*; 
import org.apache.struts.action.*;
import org.apache.struts.Globals;
import org.apache.struts.util.MessageResources;
 
public class UserForm extends ActionForm {
    private String username;
    private String password;
    
    public void setUsername(String username) { 
        this.username = username; 
    } 
    
    public void setPassword(String password) { 
        this.password = password; 
    } 
    
    public String getUsername() { 
        return username; 
    }
    
    public String getPassword() {
        return password;
    } 
    
    public void reset(ActionMapping mapping, 
                      HttpServletRequest req) {
        username = null;
        password = null;
    }
    
    public ActionErrors validate(ActionMapping mapping, 
                                HttpServletRequest request) {

        ActionErrors errors = new ActionErrors();
        if(getUsername() == null || 
                getUsername().length() < 1) {

            errors.add(ActionMessages.GLOBAL_MESSAGE, 
                new ActionMessage("error.invalidUsername")); 
        }
        
        if(getPassword() == null || 
                getPassword().length() < 1) {

            errors.add(ActionMessages.GLOBAL_MESSAGE, 
                new ActionMessage("error.invalidPassword"));
        }
        
        return errors;
    }
}


ActionMessage中的字串(例如 error.invalidUsername)对应于讯息档案中的键值。LoginAction.java可以修改如下:

  • LoginAction.java
package onlyfun.caterpillar;

 import javax.servlet.http.*; 
 import org.apache.struts.action.*; 
 import org.apache.commons.beanutils.PropertyUtils;
 
 public class LoginAction extends Action {
    public ActionForward execute(ActionMapping mapping,
                               ActionForm form,
                               HttpServletRequest request, 
                               HttpServletResponse response) 
                                  throws Exception { 
        
        String username = (String) 
          PropertyUtils.getSimpleProperty(form, "username"); 
        String password = (String) 
          PropertyUtils.getSimpleProperty(form, "password"); 
        
        request.setAttribute("username", username);
        
        if(username.equals("caterpillar") && 
                  password.equals("1234")) {
            return mapping.findForward("helloUser"); 
        }
        
        ActionMessages messages = new ActionMessages();
        messages.add(ActionMessages.GLOBAL_MESSAGE, 
          new ActionMessage("message.namePasswordMismatched")
          );

        addMessages(request, messages);
        
        return mapping.findForward("loginFail"); 
    }
}


最后配合<html:messages>标签,可以输出ActionMessages的内容,来修改一下fail.jsp:

  • fail.jsp
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<html>
<head> 
<title>Sorry!</title> 
</head> 
 <body>
    <H1>

    <html:messages id="error"> 
        <bean:write name="error"/> 
    </html:messages>

    <html:messages id="message" message="true"> 
        <bean:write name="message"/> 
    </html:messages>
    
    </H1>
    <p>
    <a href='/strutsapp/html/form.htm'>Login</a>
 </body> 

</html>


<html:messages>的message属性如果不设定为true,会输出ActionErrors中所储存的讯息,Error代表的是一个操作方面的错误,例如错误操作导致使用者名称或密码为空(当然也许也是故意的)。

<html:messages>的message属性如果设定为true,会输出ActionMessages中所储存的讯息, Message表示一个提示讯息,也许使用者输入了不正确的资讯,例如在输入名称与密码时打错了字,程式要提示使用者他们输入了不正确的讯息。

在国际化讯息方面,<html:messages>标签是根据session中的Locale物件来决定要显示区域讯息,您可以在 Action中使用setLocale()方法来改变Locale物件,例如:

Locale locale = new Locale("zh", "CN");
setLocale(request, locale);

 
如上设定,<html:messages>会找messages_zh_CN.properties中的简体中文讯息来显示。现在的问题是,那ActionForm中的讯息呢?来看一下setLocale()中的原始码您就知道怎么作了:

protected void setLocale(HttpServletRequest request,
                          Locale locale) {
    HttpSession session = request.getSession();
        if (locale == null) {
            locale = Locale.getDefault();
        }
    session.setAttribute(Globals.LOCALE_KEY, locale);
}

 
所以如果您要一开始进行 ActionForm 验证时就使用区域化讯息,则可以在reset()或validate()方法中加入:

HttpSession session = request.getSession();
session.setAttribute(Globals.LOCALE_KEY, locale);

 
或者您可以在必要的地方加入以上这段讯息,像是Servlet Filter等地方,这就看您的需求而定了。

分享到:
评论

相关推荐

    JSF页面,<p:fileUpload组件文件上传

    &lt;p:growl id="messages" showDetail="true" /&gt; &lt;/h:form&gt; &lt;/h:body&gt; ``` 在上述代码中,`fileUploadListener`属性绑定到一个后台bean的方法,用于处理文件上传事件。`mode="advanced"`表示使用高级模式,支持多...

    Struts应用开发完全手册(html标签)

    `&lt;html:errors&gt;`和`&lt;html:messages&gt;`标签则用于在页面上显示错误信息和系统消息。`&lt;html:errors&gt;`通常用于展示表单验证失败时的错误信息,而`&lt;html:messages&gt;`则用于显示一般性的系统消息,如通知或警告。 #### ...

    Struts标签库 ppt教程

    表单相关的标签,如`&lt;html:form&gt;`、`&lt;html:text&gt;`、`&lt;html:password&gt;`、`&lt;html:textarea&gt;`、`&lt;html:hidden&gt;`、`&lt;html:radio&gt;`、`&lt;html:checkbox&gt;`、`&lt;html:multibox&gt;`、`&lt;html:select&gt;`、`&lt;html:submit&gt;`、`...

    Struts标签文档

    9. `&lt;html:messages&gt;`:类似于`&lt;html:errors&gt;`,但用于显示全局消息,如提示信息或系统通知。 了解并熟练使用这些Struts HTML标签,可以帮助开发者更高效地构建Web界面,减少直接编写JSP页面的复杂性。同时,这些...

    struts2标签详解与实例

    例如,使用`&lt;s:head&gt;`标签引入CSS和JavaScript资源,`&lt;s:fielderror&gt;`显示字段验证错误,`&lt;s:messages&gt;`展示全局消息。 四、实例解析 以下是一个简单的用户注册表单的示例: ```jsp &lt;%@ taglib prefix="s" uri="/...

    struts标签库使用

    例如,可以使用`&lt;html:form&gt;`标签的`validator="true"`属性启用校验,并通过`&lt;html:messages&gt;`显示验证错误。 5. **国际化** 使用`&lt;bean:message&gt;`和`&lt;fmt:message&gt;`标签可以实现国际化。这些标签从资源文件中获取...

    jsf常用标签整理

    6. 标签&lt;h:messages&gt;用于显示验证错误或信息消息,例如:&lt;h:messages globalOnly="true"/&gt;(全局消息)或&lt;h:messages info="true"/&gt;(仅显示信息类型的消息)。 7. 标签&lt;h:inputText&gt;、&lt;h:inputSecret&gt;、&lt;h:input...

    JSTL标签-讲解及实例

    - **`&lt;c:out&gt;`标签**:用于在JSP页面中输出数据。 - 属性: - `value`:必填项,表示要输出的数据,可以是常量或EL表达式。 - `default`:非必填,当`value`属性的值为`null`时输出的默认信息。 - `escapeXml`:...

    JSF标签详解.docx

    - **其它标签**:包括`&lt;h:form&gt;`定义表单,`&lt;h:message&gt;`和`&lt;h:messages&gt;`显示验证错误,以及`&lt;h:graphicImage&gt;`显示图片等。 3. 表格处理 JSF也支持创建复杂的表格布局。例如: - **简单的表格**:`&lt;h:dataTable&gt;`...

    Struts1.x的标签库使用示例

    - `&lt;s:messages&gt;`:显示用户消息或提示信息。 **3. 标签使用示例** 以下是一个简单的例子,展示如何使用Struts1.x标签创建一个用户登录表单: ```jsp &lt;%@ taglib prefix="s" uri="/struts-tags" %&gt; &lt;html&gt; &lt;head&gt; ...

    html标题库 详细和各种功能

    - **错误消息显示**:利用`&lt;html:errors&gt;`和`&lt;html:messages&gt;`标签显示表单验证错误消息,提高用户体验。 ### 总结 通过上述分析,我们了解到HTML标题的重要性和在网页结构中的作用,同时也掌握了Struts框架中HTML...

    重要知识JSF标签.pdf

    5. **其他**:包括`&lt;h:form&gt;`、`&lt;h:message&gt;`、`&lt;h:messages&gt;`和`&lt;h:graphicImage&gt;`等。 这些标签拥有共同的属性,例如: - `id`:用于唯一标识组件,以便其他标签引用。 - `binding`:允许将组件绑定到`...

    struts标签库.ppt

    - `&lt;html:messages&gt;`:这个标签用于显示来自ActionForm或Action错误消息。它可以帮助统一处理页面上的错误信息显示。 - `&lt;html:form&gt;`:用于创建表单,它能够自动绑定到ActionForm,并且可以设置提交的URL和HTTP...

    struts2常用标签

    - **功能**:类似于HTML中的`&lt;a&gt;`标签,用于创建超链接。 - **示例**: ```xml &lt;s:a href="%{someAction!}"&gt;点击这里&lt;/s:a&gt; ``` ##### 2. `&lt;s:action name=""&gt;` —— 执行Action - **功能**:用于调用Action类中...

    JSF标签暨注解规范

    JSF(JavaServer Faces)是一种Java Web...例如,`&lt;f:ajax&gt;`标签可以轻松地添加Ajax功能,而`&lt;h:messages&gt;`则用于显示验证错误消息。通过深入理解和熟练应用这些标签和注解,开发者可以构建出高效、易维护的JSF应用。

    JSF中文标签

    - **其他标签**:如`&lt;h:form&gt;`、`&lt;f:message&gt;`、`&lt;f:messages&gt;`等。 #### 2. JSF标准HTML标签共通属性 JSF中的HTML标签具有一些共通的属性,具体如下: - **id**:所有组件均可设置,用于标识组件以便其他标签或...

    北大青鸟-JSF标签

    - `&lt;h:messages&gt;`:显示验证错误信息。 - `&lt;h:panelGrid&gt;`:布局组件,类似HTML的table。 - `&lt;h:selectOne&gt;`和`&lt;h:selectMany&gt;`:创建单选或多选列表。 - `&lt;h:selectItem&gt;`和`&lt;h:selectItems&gt;`:定义选择列表的...

Global site tag (gtag.js) - Google Analytics