我使用preRenderView时不显示验证错误

时间:2012-03-23 11:17:30

标签: jsf-2

我有页面管理用户。所有用户都将在primefaces数据表中显示。

用于编辑用户我推荐一个链接名称是编辑。所以当我点击编辑时,它将带有id

用户并转到编辑页面。在我使用的编辑页面

<f:event type="preRenderView" listener="#{editUserBean.init}"/>.

所以init()方法将获取请求参数。

我的问题是我在editUser页面上进行了验证。当我提交表格时没有任何

值然后它不显示任何消息错误消息。它正在没有任何

的情况下工作

值。在页面上有两种形式。一个表单有preRenderView标记,其他表单有

可验证的可编辑数据。

` public void init()抛出异常     {

    Object o1=FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");


    if(o1==null ||(editNews=Facade.othfac().getTVecNewsFindAllValidTill(o1.toString(),Integer.valueOf(o2.toString())))==null)
    {
        FacesContext.getCurrentInstance().getExternalContext().redirect("/HeWebEV/admin/ManageUsrs.jsf");
    }
    else
    {
        setEditNews(Facade.othfac().getTVecNewsFindAllValidTill(o1.toString(),Integer.valueOf(o2.toString())));
    }

}

public void updateNewsAction() throws Exception
{
    log.info("in UpdateUserAction__");
    save to database.

    FacesContext.getCurrentInstance().getExternalContext().redirect("/HeWebEV/admin/ManageUser.jsf");
}`  

它不是调用更新操作,而是在没有参数的情况下调用init(),因此它是

重定向到其他页面。

当我删除preRenderView标记并使用Constructor而不是init()时,它正在工作。

1 个答案:

答案 0 :(得分:0)

bean必须是@ViewScoped并且init()方法应该仅在初始请求期间完成其工作,而不是在回发时。

public void init() {
    if (!FacesContext.getCurrentInstance().isPostback()) {
        // Do the job here.
    }
}