java.lang.ClassCastException: java.lang.String 无法转换为 org.primefaces.component.api.ClientBehaviorRenderingMode

java.lang.ClassCastException: java.lang.String cannot be cast to org.primefaces.component.api.ClientBehaviorRenderingMode

我需要将 hostPage 参数值发送到我的 bean loginDialog() 方法。

<h:commandButton id="loginbtn" value="Sign in" action="#{userBean.loginDialog()}" class="btn-myForm"  >
    <f:param name="hostPage" value="Books"/>
    <p:ajax process="@form" update="@form"/>
</h:commandButton>

但是我得到了这个错误:

java.lang.ClassCastException: java.lang.String cannot be cast to org.primefaces.component.api.ClientBehaviorRenderingMode

当我删除 <f:param><p:ajax> 时,我没有错误。这是怎么造成的,我该如何解决?

我不知道 primefaces,但我建议如下:

如果你想用AJAX发送表单数据,那么:

    <h:commandButton value="Sign in">
    <f:param name="hostPage" value="Books"/>
    <f:ajax execute="@form" render="@form" listener="#{userBean.loginDialog}" ></f:ajax>
    </h:commandButton>

在你的 bean 中:

public final void loginDialog(AjaxBehaviorEvent event) {
    String param = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("hostPage");

}

或 (EL 2.2)

    <h:commandButton value="Sign in">
    <f:ajax execute="@form" render="@form" listener="#{userBean.loginDialog('Books')}" ></f:ajax>
    </h:commandButton>

在你的 bean 中:

public final void loginDialog(String param) {


}

看起来 org.primefaces.behavior.ajax.AjaxBehaviorRenderer 可能有 had/has 一个缺陷导致您看到的异常。无论如何,还有其他几种方法可以实现您需要完成的任务。这是一种密切反映问题措辞的方法(自 JSF 2.0 起有效):

<h:commandButton id="loginbtn" value="Sign in" action="#{userBean.loginDialog(Books)}" class="btn-myForm" >
    <f:ajax execute="@form" render="@form" />
</h:commandButton>

并且在您的托管 Bean 中:

    public String loginDialog(String pageName) {
       String nextPage = pageName; 
    }

但正如我所说,这只是一种方法。您可以在线找到大量关于在 JSF 中传递参数的文档。