Desabilitando campo JSF + Primefaces

Pessoal, boa tarde!

Estou desenvolvendo um sistema onde eu preciso, quando habilitar a opção “Cartão” no campo “Tipo de Pagamento”, habilitar o campo de parcelas. Porém se a opção for “À vista”, este campo referente à parcela deve permanecer desabilitado.

venda.xhtml:

<p:dialog widgetVar="dlgVendNovo" closable="false" draggable="false" resizable="false" modal="true" appendTo="@(body)" header="Nova Venda">
			<h:form id="frmVendNovo">
				<h:panelGrid id="pnlVendNovo" columns="2">
					<p:outputLabel value="Código:" />
					<p:inputText size="30" maxlength="50" value="#{MBVenda.venda.codigo_venda}" required="true" requiredMessage="O campo Código do Produto é obrigatório."/>
					<p:outputLabel value="Descrição:" />
					<p:inputText size="30" maxlength="50" value="#{MBVenda.venda.descricao}"/>
					<p:outputLabel value="Data da Venda:" />
					<p:calendar value="#{MBVenda.venda.data_venda}" pattern="dd-MM-yyyy" mask="true" size="15" />
					<p:outputLabel value="Quantidade:" />
					<p:inputText size="30" maxlength="50" value="#{MBVenda.venda.quantidade}"/>
					<p:outputLabel value="Preço:" />
					<p:inputText size="30" maxlength="50" value="#{MBVenda.venda.preco}" />
					<p:outputLabel value="Produto:" />
					<p:selectOneMenu value="#{MBVenda.venda.produto.codigo}" filter="true">
						<f:selectItem itemValue="" itemLabel="Selecione um produto" />
						<f:selectItems value="#{MBVenda.comboProdutos}" var="item" itemValue="#{item.codigo}" itemLabel="#{item.codigo}" />
					</p:selectOneMenu>
					<p:outputLabel value="Cliente:" />
					<p:selectOneMenu value="#{MBVenda.venda.cliente.cpf_cliente}" filter="true">
						<f:selectItem itemValue="" itemLabel="Selecione um cliente" />
						<f:selectItems value="#{MBVenda.comboClientes}" var="item" itemValue="#{item.cpf_cliente}" itemLabel="#{item.cpf_cliente}" />
					</p:selectOneMenu>
					<p:outputLabel value="Pagamento:" />
					<p:selectOneMenu value="#{MBVenda.venda.tipoPagamento.id_tipo_pagamento}" filter="true">
						<f:selectItem itemValue="" itemLabel="Selecione um Tipo de Pagamento" />
						<f:selectItems value="#{MBVenda.comboTiposPagamentos}" var="item" itemValue="#{item.id_tipo_pagamento}" itemLabel="#{item.id_tipo_pagamento}" />
					</p:selectOneMenu>
					<p:outputLabel value="Parcelas" />
					<p:inputText size="30" maxlength="50" value="#{MBVenda.venda.parcelas}" disabled="true" />
				</h:panelGrid>
				<h:panelGrid columns="2">
					<p:commandButton value="Gravar" actionListener="#{MBVenda.novo}" oncomplete="PF('dlgVendNovo').hide(); tabelaVendas.clearFilters();" 
						update=":frmVendListagem:tblVendas :msgGlobal"/>
					<p:commandButton value="Cancelar" onclick="PF('dlgVendNovo').hide();" />
				</h:panelGrid>
			</h:form>
		</p:dialog>

Obrigado pela ajuda.

Acredito que o seu mb seja o MBVenda.

Cria uma variável do tipo boolean lá no mb e bota um evento onchange no combo “Tipo de Pagamento” chamando um método no mb.

Nesse método vc seta o valor dessa variável e chama essa variável no disabled do campo referente à parcela.

Hugo.

Eu fiz da seguinte forma:

venda.xhtml:

<p:outputLabel value="Pagamento:" />
					<p:selectOneMenu value="#{MBVenda.venda.tipoPagamento.id_tipo_pagamento}" filter="true">
						<f:selectItem itemValue="" itemLabel="Selecione um Tipo de Pagamento" />
						<f:selectItems value="#{MBVenda.comboTiposPagamentos}" var="item" itemValue="#{item.id_tipo_pagamento}" itemLabel="#{item.id_tipo_pagamento}" />
						<p:ajax listener="#{MBVenda.renderizar}" update=":frmVendNovo:pnlVendNovo" /> 
					</p:selectOneMenu>
					<p:outputLabel value="Parcelas" />
					<p:inputText size="30" maxlength="50" value="#{MBVenda.venda.parcelas}" rendered="#{MBVenda.isRederiza}" />

vendaBean.java:

public void renderizar() {  
        if(getComboTiposPagamentos().equals("Cartão")){  
            isRederiza = true;  
        } else {  
            isRederiza = false;  
        }  
    }

Mas não funcionou.

Ele está chamando o método toda vez que vc altera o selectOneMenu?

Adiciona o event=“change” no p:ajax que aí ele vai chamar o listener toda vez que vc alterar o item selecionado.

Ficaria assim o p:ajax:

<p:ajax listener="#{MBVenda.renderizar}" update=":frmVendNovo:pnlVendNovo" event="change" />

Eu tentei assim, mas ainda não funcionou.

Mas o que tá acontecendo? Pq ele n está funcionando? Ele n está chamando o listener? Ele n está alterando o valor da variável? Ele n está dando o update no lugar que tinha que ficar desabilitado? Debuga aí certinho pra ver o ponto que está dando o problema.

Hugo, consegui resolver.

Como você conseguiu resolver? Pois tenho o mesmo problema!

Esse tópico é meio velho…
@silviobarretto Cria um novo, posta o código que já tem e eu mesmo te ajudarei

Ok!