ViewScope - RequestScope

2 respostas
D

Boa noite pessoal
Tenho um formulario para cadastro de clientes, que conforme seu tipo [Fisico ou Juridico] renderico “xhtml” diferentes.
Abaixo segue o codigo.

<h:form id="Cadastro" prependId="false" >

	<div class="boxCamposFormulario">

		<h:inputHidden value="#{ClienteCadastroBean.cliente.clienteID}" />

		<p:outputPanel styleClass="boxW200" id="boxTipoCliente">
		
			<h:outputLabel value="Tipo Cliente" for="TipoCliente" title="Tipo Cliente" styleClass="obrigatorio w200 lblDescCampo" /> 
			<p:selectOneMenu id="TipoCliente" value="#{ClienteCadastroBean.cliente.tipoCliente}" styleClass="w200" required="true" requiredMessage="#{MensagemBean.mensagemFormulario}" >
				<f:selectItem itemLabel="#{MensagemBean.textoSelecione}"  itemValue="" /> 
				<f:selectItem id="clienteFisico" itemLabel="Cliente Fisico" itemValue="F"/>
				<f:selectItem id="clienteJuridico" itemLabel="Cliente Juridico" itemValue="J" />
				<p:ajax event="change" listener="#{ClienteCadastroBean.VerificaTipoCliente}" update="btCadastrar,boxClienteJuridico,boxClienteFisico"  oncomplete="DefineCampos()" />
			</p:selectOneMenu>

		</p:outputPanel>
		
		<p:outputPanel id="boxClienteFisico" >
		
			<p:outputPanel rendered="#{ClienteCadastroBean.clienteFisico}">
		
				<ui:insert name="boxClienteFisico">
					<ui:include src="clienteFisico.xhtml" />
				</ui:insert>
				
			</p:outputPanel>
		
		</p:outputPanel>
		
		<p:outputPanel id="boxClienteJuridico" >
		
			<p:outputPanel rendered="#{!ClienteCadastroBean.clienteFisico}" >
		
				<ui:insert name="boxClienteJuridico">
					<ui:include src="clienteJuridico.xhtml" />
				</ui:insert>
				
			</p:outputPanel>
		
		</p:outputPanel>

	</div>
	
	<p:commandButton id="btCadastrar" action="#{ClienteCadastroBean.Salvar}" value="Cadastrar" styleClass="btCadastrar" update="boxMensagemValidacao" ajax="false"/>

</h:form>

Dentro dos xhtmls de cada um tenho seus respectivos campos de cadastro, como CPF, RG para cliente fisico e CNPJ e Razao Social para cliente Juridico

Cada um deste formularios tem campos obrigatorios que precisam ser preechidos, como por exemplo Endereco, Bairro , Cidade etc…

Ao selecionar o tipo de cliente o ajax [ <p:ajax event=“change” listener="#{ClienteCadastroBean.VerificaTipoCliente}" update=“btCadastrar,boxClienteJuridico,boxClienteFisico” oncomplete=“DefineCampos()” /> ] é disparado e os formularios são renderizados sem problemas, mas meu problema é o seguinte
Para que os campos obrigatorios de cada formulario sejam validados eu coloquei o scoped do bean de cliente como VIEW, o problema ocorre quando tento alterar um cliente que está em uma listagem, por exemplo, tenho um dataTable, listando os cliente do banco. e ao clicar para editar um cliente eu debugo o bean e os dados são impressos certinho no console, mas não são carregados na tela, e se eu mudar meu scope pra REQUEST as informacoes são carregadas na tela, mas perco a validação dos campos obrigatorios no formulario.
Gostaria de saber como poderia fazer para a tela de edicao “Carregar” as informações do bean com o scope de VIEW, ou com o scode de REQUEST, como faria para validar os campos obrigatorios

Ah, desculpem-me pelo texto grande

2 Respostas

yorgan

Sendo request ou view, sempre que você submeter uma action o objeto será preenchido com todos os campos do form.
Isso quer dizer que nesse submit você poderá validar os dados e retornar para a tela as mensagens de validação.
Pelo que entendi, a sua dúvida está em como implementar o MB e não o XHTML que colou no post.

[]'s
Daniel

D

Olá yorgan minha dúvida é exatamente essa, acho que compreendeste.
No cenário que descrevi acontecem duas coisas distintas, no XHTML eu renderizo os campos conforme a escolha do usuário, e estes campos não são validados no scope de request, porque foram renderizados via “ajax” apos a escolha do tipo de cliente, logo os campos não foram carregados ao carregar da pagina e com scoped view essa validação funciona mas não a edição de um cliente que foi selecionado no dataTable;
Minha dúvida então seria, como fazer a tela carregar os dados com scoped view, ou como fazer o sistema validar os campos com o scoped request ?

Criado 19 de novembro de 2011
Ultima resposta 20 de nov. de 2011
Respostas 2
Participantes 2