JSF笔记 – JSF消息FacesMessage的使用
本文由发表于6年前 | J2EE | 评论数 3 |  被围观 15,879 views+
JSF支持4种级别的消息:如果要使用JSF消息,可以通过构造方法创建一个FacesMessage对象:下面来看一个注册的例子,如果密码的长度少于6位就在结果页面中提示错误:

在JSF生命周期中,任何组件都可以创建一个JSF消息,这个消息通常由FacesContext来添加,FacesContext会自动维护应用的消息队列,当JSF生命周期结束时,视图页面只要使用简单的<h:messages>或者<h:message>标签即可输出这些消息。

JSF支持4种级别的消息:
一般消息:FacesMessage.SEVERITY_INFO
警告消息:FacesMessage.SEVERITY_WARNING
错误消息:FacesMessage.SEVERITY_ERROR
致命错误:FacesMessage.SEVERITY_FATAL
如果要使用JSF消息,可以通过构造方法创建一个FacesMessage对象:
FacesMessage(severity, summary, detail)
severty:指定消息的级别
summary:指定消息的摘要
detail:指定消息的详细信息
下面来看一个注册的例子,如果密码的长度少于6位就在结果页面中提示错误:

首先是编写托管Bean UserBean:

public class UserBean {

    private String username;
    private String password;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    /**
   * 在setPassword方法中给输入的password进行判断并使用addMessage方法添加错误信息
   * @param password
   */
    public void setPassword(String password) {
        if(password.length() < 6){
            FacesContext.getCurrentInstance().addMessage("password", new FacesMessage(FacesMessage.SEVERITY_FATAL, "密码错误", "密码长度必须大于6位数!"));
        }
        this.password = password;
    }

    /**
   * 注册的方法,这里简单的返回success视图
   * @return
   */
    public String regist(){
        return "success";
    }
}

其中regist是需要使用的表单提交方法,这里只是简单的返回了seccess视图,即是结果页面,在setPassword方法中对password进行了判断,并在符合条件时添加错误信息到FacesContext中。

接下来在faces-config.xml中配置托管Bean:

<!-- 配置backing-bean -->
<managed-bean>
    <managed-bean-name>userBean</managed-bean-name>
    <managed-bean-class>com.itzhai.JSFMessage.UserBean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

接下来是编写register.jsp注册页面:

<f:view>
    <h3>用户注册</h3>
    <h:form id="loginForm">
        用户名:<h:inputText value="#{userBean.username }"></h:inputText>
        密码:<h:inputText id="password" value="#{userBean.password }"></h:inputText>
        <h:commandButton action="#{userBean.regist }" value="登录"></h:commandButton>
    </h:form>
</f:view>

最后是编写show.jsp结果页面:

<f:view>
    <h:messages />
注册结果<br />
用户名:<h:outputText value="#{userBean.username }" /><br />
密码:<h:outputText value="#{userBean.password }" />
</f:view>

这里使用<h:message>标签输出了错误信息。

最后设置页面导航规则:

<navigation-rule>
    <!-- 导航规则的输入页面 -->
    <from-view-id>/JSFMessage/register.jsp</from-view-id>
    <navigation-case>
        <from-outcome>success</from-outcome>
        <to-view-id>/JSFMessage/show.jsp</to-view-id>
    </navigation-case>
</navigation-rule>

这样就可以在结果页面中输出错误信息了。

为了使得错误时不跳转到错误页面而是在注册页面显示信息,可以在setPassword()方法中跑出异常,这时应用将不会激发<h:commandButton>组件上的action属性绑定的userBean.regist方法,而是直接返回register.jsp页面,我们可以在setPassword()方法中这样处理:

public void setPassword(String password) {
    if(password.length() < 6){
        throw new RuntimeException("用户密码必须不少于6位!");
    }
    this.password = password;
}

修改register.jsp页面

<f:view>
    <h3>用户注册</h3>
    <!-- 输出组件上的所有异常 -->
    <h:messages />
    <h:form id="loginForm">
        用户名:<h:inputText value="#{userBean.username }"></h:inputText>
        密码:<h:inputText id="password" value="#{userBean.password }"></h:inputText>
        <!-- 输出password字段关联的异常信息 -->
        <h:message for="password" />
        <h:commandButton action="#{userBean.regist }" value="登录"></h:commandButton>
    </h:form>
</f:view>

这样就可以在注册页面显示错误信息了。

除了文章中有特别说明,均为IT宅原创文章,转载请以链接形式注明出处。
本文链接:http://www.itzhai.com/jsf-notes-jsf-facesmessage-to-use-the-message.html
关键字: ,
arthinking Java技术交流群:280755654,入门群:428693174 more
分享到:
 
2011 12/4
如果您有更好的原创技术博文或者观点,欢迎投稿:admin@itzhai.com,或者关注订阅左侧浮动面板的微信号订阅IT宅itread)发送消息。
文章评论
    3条评论
  1. a 2015年01月22日15:47:49  #-49楼 回复 回复

    http://www.baidu.com

  2. a 2015年01月22日15:48:23  #-48楼 回复 回复

    百度一下,你就知道

  3. b 2015年01月22日15:49:57  #-47楼 回复 回复

    如果页面中有多个输入框,但是想在最后一行给出提示该怎么实现呢?
    类似于:
    输入框1 id=”a”
    输入框2 id=”b”
    输入框3 id=”c”

    如果让abc的提示信息都显示在message标签中,实现同时for=”a”,for=”b”,for=”c” 的效果

给我留言

有人回复时邮件通知我
J2EE的相关文章
随机文章 本月热门 热评
1 汇编中的大小写字母转换的方法 2011/4/16
2 ExtJS的FormPanel中的组件使用load加载远程的JSON数据的方法 2011/8/6
3 C++语法笔记 – 流类库与IO 2011/9/3
4 碰撞球(连连看)游戏 连连看匹配算法分析与实现思路 2012/4/10
5 一个最简单的系统引导扇区的实现方法(Boot Sector) 2011/5/1
6 乐器销售管理系统 | Project 2011/11/15
友情推荐 更多
破博客 文官洗碗安天下,武将打怪定乾坤。多么美好的年代,思之令人泪落。
Mr.5's Life 白天是一名程序员,晚上就是个有抱负的探索者
行知-追寻技术之美 关注大数据,分布式系统
我爱编程 编程成长轨迹
Cynthia's Blog 学习笔记 知识总结 思考感悟
 
猜您喜欢
欢迎关注我的公众号 IT宅
关于IT宅 文章归档

IT宅中的文章除了标题注明转载或有特别说明的文章,均为IT宅的技术知识总结,学习笔记或随笔。如果喜欢,请使用文章下面提供的分享组件。转载请注明出处并加入文章的原链接。 感谢大家的支持。

联系我们:admin@itzhai.com

Theme by arthinking. Copyright © 2011-2015 IT宅.com 保留所有权利.