使用托管bean进行导航

时间:2016-03-19 13:01:12

标签: jsf jsf-2 navigation managed-bean

我正在研究JSF 2.2中的一个简单项目,但我在某些页面之间导航时遇到了一些问题。在项目中,我有一个通用模板,所有视图都是该通用模板的模板客户端。

这是我遇到麻烦的观点:

<h:body>

    <ui:composition template="./LayoutGeneral.xhtml">

        <ui:define name="content">
            <p:commandButton value="Registrar Comunidad" action="#{comunidadBean.irRegisterView}"/>
        </ui:define>

    </ui:composition>

</h:body>

在commandButton的操作中,我从托管bean调用一个方法(Thar托管bean有其他方法,我调用它来更改页面,它们工作正常,但这种方法不起作用):

(Managed Bean)

@ManagedBean
@SessionScoped
public class ComunidadBean {    
    private String idComunidad;
    private String idPresidente;
    private String calle;
    private int numero;
    private int nVecinos;

    @EJB
    private ComunidadDAO ejb;

    public String register(){
        if(ejb.realizaRegistro(this)){
            return "principalView";
        } else{
            FacesMessage fm = new FacesMessage ("No se pudo registrar");
            FacesContext.getCurrentInstance().addMessage("msg", fm);
            return null;
        }
    }

    public String irRegisterView(){
        return "registroCView";
    }

}

因此方法“register”工作正常并且页面更改但是方法“irRegisterView”没有导航到“registroCView”页面。

有人知道它发生了什么吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我可以'发表评论,所以我把它写成答案。

  • 我看到你的bean是SessionScoped。您需要实现Serializable,因为SessionScoped bean在一段时间后会被钝化。
  • 你在LayoutGeneral.xhtml有表格吗?如果没有,则此代码将永远不会起作用,因为commandButton需要在表单中。
  • 为什么将该方法称为属性?在JSF 2.2和EL 2.3中,您可以调用这样的方法:#{comunidadBean.isRegisterView()}
  • 点击按钮会抛出一些异常吗?如果是,请粘贴堆栈跟踪。