PRIMEFACES tratando "InputMismatchException"

5 respostas
T
meu xhtml:
<h:form id="cadastroDeProduto">
            <p:panel header="Cadastro e alteraçao de produtos">
                <table border="0">
                    <tr>
                        <td align="right" ><h:outputText value="Nome "/></td>
                        <td><p:inputText id="nome" value="#{cadProduto.produto.nome}" style="width: 223px;"/></td>
                    </tr>
                    <tr>
                        <td align="right"><h:outputText value="Unidade "/></td>
                        <td>
                            <p:selectOneMenu id="menu" value="#{cadProduto.posListaUnidade}" style="width: 230px;"  >
                                <f:selectItems  value="#{cadProduto.listaUnidades}" var="uni" itemValue="#{cadProduto.listaUnidades.indexOf(uni)}" itemLabel="#{uni.nome}"/>
                            </p:selectOneMenu>
                        </td>
                    </tr>
                    <tr>
                        <td align="right"><h:outputText value="Medida "/></td>
                        <td >
                            <p:inputText id="medida" value="#{cadProduto.produto.medida}" style="width: 223px;" />
                        </td>
                    </tr>
                    <tr>
                        <td align="right"><h:outputText id="quantidade" value="Quantidade"/></td>
                        <td><p:inputText value="#{cadProduto.produto.quantidadeEmStoque}" style="width: 223px;" >
                            </p:inputText>
                             </td>
                    </tr>
                    <tr>
                        <td></td>
                        <td>
                            <p:commandButton value="Registra" action="#{cadProduto.mergProduto()}" update="cadastroDeProduto"  />
                            <p:commandButton value="Cancela" action="#{cadProduto.cancela()}" update="cadastroDeProduto" />
                        </td>
                    </tr>
                </table>
            </p:panel>
            <p:growl id="messages" showSummary="true" />
        </h:form>
meu método
public void mergProduto() {
        
        alterando = false;
        //determina a unidade do produto
        produto.setUnidadeDeMedida(listaUnidades.get(posListaUnidade));
        //salva no banco
        DaoProduto.merge(produto);
        //atualiza listagem
        updateListagem();
        zeraTudo();
        //manda mensagem
        SessionUtil.addSuccessMessage("produtocadastrado");
        
    }
quando é entrado um valor inválido nos campos de medida ou quantidade o meu método mergProduto() não é executado e o meu growl é ativado exibindo a mensagem: "id do form":"id do elemento": ' "valor inválido digitado pelo uário" ' deve ser um número formado por um ou mais dígitos. uma vez q meu método n é executado, mesmo que haja um try cath nele prevendo o erro, não haverá diferença, pois o método n é executado e eu n sei como tratar essa mensagem, sei como ocultar, mas n sei como trata-la, por isso venho aqui pedir a ajuda de todos

5 Respostas

G

primeiro tira os ‘()’ do nome do método

#{cadProduto.mergProjeto} ao invés de #{cadProduto.mergProjeto()}
 #{cadProduto.cancela} ao invés de  #{cadProduto.cancela()}

depoist tenta fazer teu inputext assim:

<p:inputText id="medida" value="#{cadProduto.produto.medida}" style="width: 223px;" validatorMessage="valor invalido">
   <f:validateRegex pattern="^[0-9]+$" />
</p:inputText>

não sou muito bom com Regex, mas acho que é assim a validação para números.

não estava ‘estourando’ no método porque não ‘chegava’ lá.

se você pegar o ciclo de vida do JSF vai ver que são: (na ordem de execução):

  1. Restore View (recuperar a tela)
  2. Apply request values (Aplicar valores do request)
  3. Process Validation (Processo de Validação)
  4. Update model values (Atualização dos valores no Modelo)
  5. Invoke Application (Invocando a aplicação)
  6. Render response (retornar resposta)

no teu caso, estava estourando no item 2 e o método é executado no 5.

tenta ai, qualquer coisa berra.

T

ô rapaz valeu pela ajuda
o pattern é realmente um bom amigo, já avia usado ele para definir o formato da data em um p:calendar
seria bom também para definir aqui o formato de entrada
tem o p:inputMask, porém eu n sei se há como definir uma mascara com quantidade de algorismos dinâmico
algo como *9.9 o que poderia ser vários números inteiros seguidos de uma virgula mais um algorismo
voltando… usando o

deu um

porém, creio q com as informações que tu me deste eu resolvo meu problema
o ciclo de vida na ordem de execução, mt útil
em breve volto com novos resultados
grato

T

RESOLVIDO

resolvi com o converterMessage
grato a todos

G

show de bola!
agora só falta colocar um [RESOLVIDO] no titulo do post :wink:

T

como eu posso fazer isso?

Criado 12 de julho de 2011
Ultima resposta 15 de jul. de 2011
Respostas 5
Participantes 2