Em uma página eu tenho um componente <p:wizard>(que fica dentro de um <h:form>) e dentro de umas das <p:tab> do <p:wizard>
eu coloquei um <p:commandButton>. Eu quero fazer uma validação para so ir para outra página quando o Array de documentos não for vazio.(Até aqui ok).
So que como meu <p:commandButton> e o botão next do <p:wizard> estão no mesmo form quando eu clico no meu <p:commandButton>(botão responsavel por adicionar itens ao Array)
ele já faz a validação, ai no caso o array ainda está vazio.
O que eu quero é que ao cliclar no <p:commandButton> não seja realizado a validação.
Exatamente como todo mundo pensou agora, é so colocar immediate=“true” no <p:commandButton> mas quando eu faço isso os valores dos meus <h:inputText> não são pegos
e desta forma são jogados valores nulos pro Array.
Outra solução seria colocar o <p:commandButton> em outro form so que ai ficaria um form dentro de outro, isso é possível?
de toda forma eu ja tentei e não funcionou.
Então minha duvida é: Como eu posso ter dois botões num mesmo form um(no caso o botão do wizard ) fazer a validação e o outro não.
<p:tab id="documentoss" title="Itens Furtados">
<p:panel header="Selecione os Itens Furtados ">
<table cellspacing="10px">
<tr>
<td><h:outputText value="Numero:" /></td>
<td><h:inputText value="#{documentoMB.ccNumero}" /></td>
<td><h:outputText value="Bandeira:" /></td>
<td><h:inputText value="#{documentoMB.ccBandeira}" /></td>
</tr>
<td><p:commandButton value="Add" update="documentos msgs @parent"
action="#{documentoMB.reinit}" >
<p:collector value="#{documentoMB.documento}"
addTo="#{documentoMB.documentos}" />
</p:commandButton></td>
</tr>
</table>
</p:panel>
<p:outputPanel id="documentos" >
<p:dataTable value="#{documentoMB.documentos}" var="documento" >
<p:column>
<f:facet name="header">
<h:outputText value="Item" />
</f:facet>
<h:outputText value="#{documento.descricao_material}" />
</p:column>
<p:column style="text-align: center;">
<f:facet name="header">
<h:outputText value="Remover" />
</f:facet>
<p:commandLink update="form:documentos"
process="@this" immediate="true">
<p:graphicImage url="/images/excluir.gif"/>
<p:collector value="#{documento}"
removeFrom="#{documentoMB.documentos}" />
</p:commandLink>
</p:column>
</p:dataTable>
</p:outputPanel>
</p:tab>
public String reinit(){
if(documentoSelecionado.equals("CC")){
documento.setDescricao_material("Cartão de Credito | Número:" + ccNumero + " | Bandeira:" + ccBandeira);
setCcNumero("");
setCcBandeira("");
}
if(documentoSelecionado.equals("CPF")){
documento.setDescricao_material("CPF | Número:" + cpfNumero);
setCpfNumero("");
}
documento = new Documento();
return null;
}
Coloquei o Codigo resumido devido ao tamanho.
Agradeço qualquer ajuda.
cara,
coloca o atributo ajax=false e ve se funciona.
t+
Tenta colocar no botão em questão o
<p:commandButton ... (seus atributos)
process="@this"/>
[quote=alissonvla]cara,
coloca o atributo ajax=false e ve se funciona.
t+[/quote]
no caso para colocar ajax=“false” no <p:commandButton>?
Coloquei e não funcionou.
[quote=bruno.neves]Tenta colocar no botão em questão o
[code]
<p:commandButton … (seus atributos)
process="@this"/>
[/code][/quote]
Aconteceu a mesma coisa que colocar o immediate=“true”, os valores dos <h:inputText> vieram como null.
cara,
esqueci de mais uma coisa, tenta assim ajax=“false” immediate=“true”, pois eu tenho um projeto aqui e funciona.
t+
[quote=alissonvla]cara,
esqueci de mais uma coisa, tenta assim ajax=“false” immediate=“true”, pois eu tenho um projeto aqui e funciona.
t+[/quote]
Não funcionou.
No seu projeto, o seu botão com o immediate=“true”, ele pega os valores dos inputText?
Realmente com o immediate=“true”(como ele so pula a parte de validação no ciclo de vida) os valores são pegos normalmente, percebi que meu problema é outro.
<td><h:selectOneMenu id="selectDocumentos"
value="#{documentoMB.documentoSelecionado}" onchange="submit()"
immediate="true" >
<f:selectItem itemValue="CC" itemLabel="Cartão de Credito" />
<f:selectItem itemValue="CPF" itemLabel="Cpf" />
<f:selectItem itemValue="RG" itemLabel="RG" />
<f:selectItem itemValue="Celular" itemLabel="Celular" />
<f:selectItem itemValue="Outros" itemLabel="Outros" />
</h:selectOneMenu></td>
Eu tenho esse <h:selectOneMenu> que quando muda o valor selecionado ele chama um metodo.
quando eu mudo o valor selecionado ele faz as validações e eu não quero que ele faça
ja coloquei o immediate=“true” so que nesse caso não esta funcionando.
mas pq vc ta colocando onchange=“submit()” ?
Porque de acordo com item escolhido no selectOneMenu são gerados campos diferentes em baixo.
cara,
tirar o onchange e use p:ajax dentro do seu h:selectOneMenu, vai ficar melhor
<p:ajax event="change" update="ID_SER_ATUALIZADO"/>
e ve se resolve seu problema
t+
[quote=alissonvla]cara,
tirar o onchange e use p:ajax dentro do seu h:selectOneMenu, vai ficar melhor
<p:ajax event="change" update="ID_SER_ATUALIZADO"/>
e ve se resolve seu problema
t+[/quote]
Na forma abaixo consigo trocar os campos do selectOneMenu e apertar o commandButton sem serem validados
mas o problema é que os valores dos inputText ficam como null.
<p:panel header="Selecione os Documentos">
<h:inputHidden value="#{documentoMB.documento.descricao_material}" required="true" />
<h:panelGrid>
<h:selectOneMenu id="selectDocumentos"
value="#{documentoMB.documentoSelecionado}"
>
<f:selectItem itemValue="CC" itemLabel="Cartão de Credito" />
<f:selectItem itemValue="CPF" itemLabel="Cpf" />
<f:selectItem itemValue="RG" itemLabel="RG" />
<f:selectItem itemValue="Celular" itemLabel="Celular" />
<f:selectItem itemValue="Outros" itemLabel="Outros" />
<p:ajax event="change" update="form:teste" />
</h:selectOneMenu>
</h:panelGrid>
<h:panelGrid id="teste" columns="2">
<h:panelGroup rendered="#{documentoMB.cc}">
<h:outputText value="Numero:" />
<h:inputText value="#{documentoMB.ccNumero}" />
<h:outputText value="Bandeira:" />
<h:inputText value="#{documentoMB.ccBandeira}" />
</h:panelGroup>
<h:panelGroup rendered="#{documentoMB.cpf}">
<h:outputText value="Numero:" />
<h:inputText value="#{documentoMB.cpfNumero}" />
</h:panelGroup>
<p:commandButton ajax="false" immediate="true" value="Add" update="documentos msgs @parent"
action="#{documentoMB.reinit}">
<p:collector value="#{documentoMB.documento}"
addTo="#{documentoMB.documentos}" />
</p:commandButton>
</h:panelGrid>
</p:panel>
Nessa forma abaixo , os valores dos inputText vem corretamente mas so se não tiver a validação, pq com ela não é possivel apertar o commandButton.
<p:panel header="Selecione os Documentos">
<!-- <h:inputHidden value="#{documentoMB.documento.descricao_material}" required="true" /> -->
<h:panelGrid>
<h:selectOneMenu id="selectDocumentos" onchange="submit()"
value="#{documentoMB.documentoSelecionado}"
>
<f:selectItem itemValue="CC" itemLabel="Cartão de Credito" />
<f:selectItem itemValue="CPF" itemLabel="Cpf" />
<f:selectItem itemValue="RG" itemLabel="RG" />
<f:selectItem itemValue="Celular" itemLabel="Celular" />
<f:selectItem itemValue="Outros" itemLabel="Outros" />
<!-- <p:ajax event="change" update="form:teste" /> -->
</h:selectOneMenu>
</h:panelGrid>
<h:panelGrid id="teste" columns="2">
<h:panelGroup rendered="#{documentoMB.cc}">
<h:outputText value="Numero:" />
<h:inputText value="#{documentoMB.ccNumero}" />
<h:outputText value="Bandeira:" />
<h:inputText value="#{documentoMB.ccBandeira}" />
</h:panelGroup>
<h:panelGroup rendered="#{documentoMB.cpf}">
<h:outputText value="Numero:" />
<h:inputText value="#{documentoMB.cpfNumero}" />
</h:panelGroup>
<p:commandButton value="Add" update="documentos msgs @parent"
action="#{documentoMB.reinit}">
<p:collector value="#{documentoMB.documento}"
addTo="#{documentoMB.documentos}" />
</p:commandButton>
</h:panelGrid>
</p:panel>
cara,
tenta colocar immediate=true em seus inputText.
uma pergunta, Aonde fica seu h:form?
t+
[quote=alissonvla]cara,
tenta colocar immediate=true em seus inputText.
uma pergunta, Aonde fica seu h:form?
t+[/quote]
Valeu por estar ajudando.
Não posso colocar immediate=true nos inputText porque posteriormente eles vão ser validados.
o form fica antes do wizard esse trecho do codido é o 3° <p:tab> do wizard.
Tive esse mesmo problema hoje e resolvi usando assim:
<p:commandButton update="table" icon="ui-icon-closethick"
title="Remover" action="#{bean.metodo}" process="@this">
<f:setPropertyActionListener value="#{usp}"
target="#{bean.duspSelecionada}" />
</p:commandButton>
Valeu!
Bom dia à todos 