JSF笔记 - JSF消息FacesMessage的使用

发布于 2011-12-04 | 更新于 2020-09-20

在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 -->

userBean
com.itzhai.JSFMessage.UserBean
request

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

<f:view>

用户注册


<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 />
注册结果

用户名:<h:outputText value=“#{userBean.username }” />

密码:<h:outputText value=“#{userBean.password }” />
</f:view>

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

最后设置页面导航规则:

/JSFMessage/register.jsp success /JSFMessage/show.jsp

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

为了使得错误时不跳转到错误页面而是在注册页面显示信息,可以在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>

用户注册


<!-- 输出组件上的所有异常 -->
<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>

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

本文作者: arthinking

本文链接: https://www.itzhai.comjsf-notes-jsf-facesmessage-to-use-the-message.html

版权声明: 版权归作者所有,未经许可不得转载,侵权必究!联系作者请加公众号。

×
IT宅

关注公众号及时获取网站内容更新。