【问题标题】:Ajax rendered jsf page doesn't bind bean valuesAjax 渲染的 jsf 页面不绑定 bean 值
【发布时间】:2015-07-24 21:48:20
【问题描述】:

我有一个 xhtml 页面,其中包含一个通过 ajax 更新的 bean 的值包含的页面。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui"
    xmlns:ui="http://java.sun.com/jsf/facelets">
<h:body>
    <div class="ui-fluid">
        <p:messages id="messages" showDetail="false" closable="true" />
        <h:form id="form">
            <p:panel id="panelInfo" header="Dados Local Instalação">
                <h:outputLabel for="tipoFornecimento" value="Tipo de Fornecimento"/>
                <p:selectOneMenu id="tipoFornecimento" value="#{cadastroController.localInstalacao.tipoFornecimento}">
                    <f:selectItems value="#{cadastroController.tiposFornecimento}"/>
                </p:selectOneMenu>
                <h:outputLabel for="familiaEquipamento" value="Família"/>
                <p:selectOneMenu id="familiaEquipamento" value="#{cadastroController.familia}" required="true">
                    <f:selectItem itemLabel="Selecione"/>
                    <f:selectItems value="#{cadastroController.familias}"/>
                    <f:ajax listener="#{cadastroController.setarEquipamentoPelaFamilia}" render=":form:panelEquipamento"/>
                </p:selectOneMenu>
            </p:panel>
            <p:panel id="panelEndereco" header="Endereço">
                <ui:include src="/logradouro.xhtml"/>
            </p:panel>
            <p:panel id="equipamentoNa" header="Equipamento NA">
                <ui:include src="/equipamentoNa.xhtml"/>
            </p:panel>
            <p:panel id="panelEquipamento" header="Equipamento">
                <ui:include src="#{cadastroController.panelEquipamento}"/>
            </p:panel>
            <p:commandButton value="Salvar" actionListener="#{cadastroController.salvarLocalInstalacao}" ajax="false"/>
        </h:form>
    </div>
</h:body>
</html>

当我更改 selectOneMenu familiaEquipamento 的值时,它会触发 bean 中的一个方法,该方法会实例化一个 bean 并将对应的 xhtml 添加到页面中

public void setarEquipamentoPelaFamilia() {
    switch(familia) {
        case AL:
            localInstalacao.setEquipamento(new Alimentador());
            setPanelEquipamento("alimentador.xhtml");
            break;
        case BF:
        case CD:
        case CDA:
        case CDP:
        case CO:
        case CR:
        case CT:
            localInstalacao.setEquipamento(new ChaveFaca());
            setPanelEquipamento("chaveFaca.xhtml");
            break;
        case FF:
        case FP:
        case FR:
        case FT: 
        case FU:
            localInstalacao.setEquipamento(new ChaveFusivel());
            setPanelEquipamento("chaveFusivel.xhtml");
            break;
        case RG:
            localInstalacao.setEquipamento(new BancoRegulador());
            setPanelEquipamento("reguladorTensao.xhtml");
            break;
        case RL:
            localInstalacao.setEquipamento(new Religador());
            setPanelEquipamento("religador.xhtml");
            break;
        case BC:
            localInstalacao.setEquipamento(new BancoCapacitor());
            setPanelEquipamento("bancoCapacitor.xhtml");
            break;
        case TD:
        case TDP:
            localInstalacao.setEquipamento(new Trafo());
            setPanelEquipamento("transformador.xhtml");
            break;
        case SL:
            localInstalacao.setEquipamento(new Seccionalizador());
            setPanelEquipamento("seccionalizador.xhtml");
            break;
    }
    localInstalacao.getEquipamento().setFamilia(familia);
}

I.E.我选择 familia 'AL',因此它将设备设置为 new Alimentador() 并返回页面 'alimentador.xhtml'。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui"
    xmlns:ui="http://java.sun.com/jsf/facelets">
        <p:outputLabel for="fasesEquipamento" value="Qtd Fases: " />
        <p:selectOneMenu id="fasesEquipamento" value="#{cadastroController.localInstalacao.equipamento.fases}">
            <f:selectItems value="#{cadastroController.fases}"/>
        </p:selectOneMenu>
        <p:outputLabel for="nrAlimentador" value="Número Alimentador: " />
        <p:inputMask mask="9?9" id="nrAlimentador" value="#{cadastroController.localInstalacao.equipamento.nrAlimentador}"/>
        <p:outputLabel for="nrEquipamento" value="Número Equipamento: " />
        <p:inputMask mask="9?9999" id="nrEquipamento" value="#{cadastroController.localInstalacao.equipamento.nrEquipamento}"/>
        <p:outputLabel for="nrEquipamentoAnterior" value="Número Equipamento Anterior: " />
        <p:inputMask mask="9?9999" id="nrEquipamentoAnterior" value="#{cadastroController.localInstalacao.equipamento.nrEquipamentoAnterior}"/>
        <p:outputLabel for="nrSubestacao" value="Número Subestação: " />
        <p:inputMask mask="9?99" id="nrSubestacao" value="#{cadastroController.localInstalacao.equipamento.nrSubestacao}"/>
        <p:outputLabel for="potencia" value="Potencia: " />
        <p:inputMask mask="9?99.9" id="potencia" value="#{cadastroController.localInstalacao.equipamento.potencia}"/>
        <p:outputLabel for="regionalEquipamento" value="Regional: " />
        <p:selectOneMenu id="regionalEquipamento" value="#{cadastroController.localInstalacao.equipamento.regional}">
            <f:selectItems value="#{cadastroController.regionais}"/>
        </p:selectOneMenu>
</ui:composition>

我使用的是 ViewScoped ManagedBean,但在提交表单后,通过 ajax 在 'alimentador.xhtml' 中添加的值未绑定到 bean localInstalacao

有什么想法吗?

【问题讨论】:

标签: ajax jsf jsf-2.2


【解决方案1】:

没关系,我设法通过升级到 Mojarra 2.2 来修复它 这似乎是JAVASERVERFACES - 1492上描述的一个已知错误

要在 JBOSS AS 7.1 中升级 Mojarra 的版本,请按照以下步骤操作Upgrading Mojarra

【讨论】:

    猜你喜欢
    • 2018-04-04
    • 2023-03-14
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    相关资源
    最近更新 更多