Primefaces 2.2 (Usando p:dialog)

1 resposta
robinsonbsilva

Bom dia,

Senhores, estou criando uma tela, onde serão cadastrados modelos de veiculos.

Para isso, preciso apenas das seguintes informações: Marca e o nome do Modelo, ex: Hyundai -> Sonata.
Na aplicação temos um cadastro de Marca, mas afim de agilizar a inserção dos Modelos, criei um botão ADD ao lado da combo marca, para assim que o usuário notar que tal marca não existe, ali mesmo ele já cadastra.

Pelo código baixo, suponhamos que eu saiba que a marca não existe na base de dados, e clique direto no botão ADD a tela é apresentada corretamente, mas se eu clicar no botão btnSave dá o seguinte erro:

/pages/modelo/create.xhtml @24,86 value="#{modeloBean.marca.descricao}": Target Unreachable, 'marca' returned null

E debugando, notei que a action do botão ADD nem chegou ao ManagedBean.

Realizando mais testes, percebi que para funcionar é necessário que antes de eu clicar no botão ADD, que eu informe a descrição do Modelo, ou seja, caso esteja nulo esse campo, não funciona.
Será que tem alguma forma de resolver isso??
Gostaria de clicar no botão ADD e cadastrar, independente de ter algo preenchido.

<ui:composition template="../template/template.xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:p="http://primefaces.prime.com.tr/ui">

    <ui:define name="pageTitle">
        <h:outputText value="#{rotulo.titulo}"></h:outputText>
    </ui:define>

	<ui:define name="content">
		<h:form id="form" prependId="true">
			<p:panel header="Cadastro de Modelos">
				<h:panelGrid id="grid" columns="4">
					<h:outputLabel for="marca" value="#{rotulo.marca}" > </h:outputLabel>
					<h:selectOneMenu id="marca"  value="#{modeloBean.modelo.marca.idMarca}" validatorMessage="#{rotulo.marca_required}" required="true">
						<f:selectItems value="#{modeloBean.marcas}"/>
					</h:selectOneMenu>
					<p:commandButton image="add" action="#{modeloBean.createMarca}" onclick="dialog.show()" update="frmMarca"/>
					<p:message for="marca" />
			
					<h:outputLabel for="modelo" value="#{rotulo.modelo}" />
					<p:inputText id="modelo" validatorMessage="#{rotulo.modelo_required}" value="#{modeloBean.modelo.descricao}" size="30" maxlength="30" required="true" />
					<p:message for="modelo" />
				</h:panelGrid>
				<br />
				&lt;p:commandButton id="btnSalvar" action="#{modeloBean.save}" value="#{rotulo.botao_salvar}" image="ui-icon ui-icon-disk" ajax="false"/&gt;
				&lt;p:commandButton id="btnVoltar" action="#{modeloBean.list}" value="#{rotulo.botao_voltar}" image="ui-icon ui-icon-close" ajax="false" immediate="true"/&gt;
			&lt;/p:panel&gt;
		&lt;/h:form&gt;
		&lt;p:dialog widgetVar="dialog"  modal="true" header="Cadastro de Marcas" resizable="false"&gt;             
			&lt;h:form id="frmMarca" prependId="true" style="font-size: 12px;"&gt;
				&lt;h:panelGrid id="grid" columns="1"&gt;
					&lt;h:outputLabel for="marca"  value="#{rotulo.marca}" /&gt;
					&lt;p:inputText id="marca" value="#{modeloBean.marca.descricao}" required="true" /&gt;
					&lt;p:message for="marca" /&gt;
				&lt;/h:panelGrid&gt;
				<br />
				&lt;p:commandButton id="btnSave" action="#{modeloBean.saveMarca}" value="#{rotulo.botao_salvar}" oncomplete="dialog.hide()" image="ui-icon ui-icon-disk" update="frmMarca, frmMarca:marca" ajax="false"/&gt;
			&lt;/h:form&gt;  
		&lt;/p:dialog&gt;
	&lt;/ui:define&gt;
&lt;/ui:composition&gt;

Desde já agradeço.

1 Resposta

A

esse erro está acontecendo pq sua variavel marca está nulla, basta vc dar um new nesse objeto que vai solucionar o problema.

t+

Criado 7 de outubro de 2011
Ultima resposta 7 de out. de 2011
Respostas 1
Participantes 2