2016-06-29 12 views
0

Ich versuche, eine Methode zum Aktualisieren von outputLabel aufzurufen, nachdem ich den auf meinem SelectOneMenu ausgewählten Wert geändert habe. Ich habe bereits alle Fragen ausprobiert, die hier beantwortet wurden, aber es funktioniert nicht. Die Methode auf meiner verwalteten Bean wird nicht aufgerufen, ich habe versucht, etwas auf der Konsole zu drucken und funktioniert nicht. Es gibt keine Ausnahmen. Ich habe diese AntwortAjax ruft die Methode für die verwaltete Bean nicht auf. SelectOneMenu valueChanged item

commandButton/commandLink/ajax action/listener method not invoked or input value not updated

gefunden, aber ich weiß nicht, ob ich etwas fehle, wahrscheinlich habe ich bereits alle adressieren Punkte in der Antwort überprüft.

Mein SelectOneMenu Code ist

<h:selectOneMenu id="creditos" value="#{comprarCreditoBean.quantidadeCreditos}" required="true" requiredMessage=" *Campo obrigatório!"> 

          <f:selectItem itemLabel="Selecione uma opção" noSelectionOption="true"/> 
          <f:selectItem itemValue="30" itemLabel="30 Créditos" /> 
          <f:selectItem itemValue="60" itemLabel="60 Créditos" /> 
          <f:selectItem itemValue="90" itemLabel="90 Créditos" /> 
          <f:selectItem itemValue="120" itemLabel="120 Créditos" /> 
          <f:ajax event="change" 
           execute="formulario" 
           render="valPagamento" 
           listener="#{comprarCreditoBean.tratarMudancaCreditos}"/> 

        </h:selectOneMenu> 
         <br /> 
        </h:panelGroup> 
        <h:message class="mensagens" for="creditos" /> 

        <h:outputLabel value="Total a Pagar: "/> 
        <h:outputLabel id="valPagamento" value="#{comprarCreditoBean.valorPagamento}" required="true" requiredMessage=" *Campo obrigatório!"> 
         <f:convertNumber currencySymbol="R$" type="currency"/> 
        </h:outputLabel> 

Das Master-Template wird mit dem <h:head> und die selectOneMenu ist bereits in einem <h:form> Komponente.

Auf meiner ManagedBean folgende Methode soll aufgerufen werden:

public void tratarMudancaCreditos(AjaxBehaviorEvent evento){ 

    System.out.println("Hi"); 
    System.out.println(this.quantidadeCreditos); 
    if(this.quantidadeCreditos == 30){ 
     this.valorPagamento = 1.0; 
    }else if(this.quantidadeCreditos == 60){ 
     this.valorPagamento = 2.0; 
    }else if(this.quantidadeCreditos == 90){ 
     this.valorPagamento = 3.0; 
    }else if(this.quantidadeCreditos == 120) { 
     this.valorPagamento = 4.0; 
    } 
} 

Ich bin wirklich besorgt über die Art und Weise Ich versuche, den Wert zu aktualisieren, die auf meiner Seite aktualisiert werden sollen, wenn die Methode nicht ist aufgerufen wird, würde nichts, was ich darin tun würde, funktionieren.

Ich bin mit Tomcat 8.0 und JSF 2.0, wenn es

@ Edit1 relevant Ich bin eine Vorlage verwenden, so dass ich einen entsprechenden Code aus meiner Vorlage veröffentlichen.

Zuerst, auf der Seite, wo sich das SelecteOneMenu befindet, habe ich den folgenden Code nur um zu identifizieren, dass ich die Vorlage verwende.

<ui:composition template="/Template.xhtml" 
xmlns:jsp="http://java.sun.com/JSP/Page" 
xmlns="http://www.w3.org/1999/xhtml" 
xmlns:b="http://bootsfaces.net/ui" 
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:ui="http://java.sun.com/jsf/facelets" 
xmlns:h="http://java.sun.com/jsf/html" version="2.0"> 

In der gleichen Seite, ich

<ui:define name="corpo-da-pagina"> 
<div class="panel panel-default"> 
     <div class="panel-heading"> 
      <h3 class="panel-title"><span class="tituloPanel">Comprar Créditos</span></h3> 
     </div> 
     <div class="panel-body" align="center"> 
     <h:form id="formulario"> 
       <h:panelGrid columns="3"> 
        <h:outputLabel value="Quantidade de Créditos (1 Minuto = 1 crédito): "/> 
        <h:panelGroup> 
         <h:selectOneMenu id="creditos" value="#{comprarCreditoBean.quantidadeCreditos}" required="true" requiredMessage=" *Campo obrigatório!"> 
          <f:selectItem itemLabel="Selecione uma opção" noSelectionOption="true"/> 
          <f:selectItem itemValue="30" itemLabel="30 Créditos" /> 
          <f:selectItem itemValue="60" itemLabel="60 Créditos" /> 
          <f:selectItem itemValue="90" itemLabel="90 Créditos" /> 
          <f:selectItem itemValue="120" itemLabel="120 Créditos" /> 
          <f:ajax event="change" 
           execute="formulario" 
           render="valPagamento" 
           listener="#{comprarCreditoBean.tratarMudancaCreditos}"/> 
         </h:selectOneMenu> 
         <br /> 
        </h:panelGroup> 
        <h:message class="mensagens" for="creditos" /> 

        <h:outputLabel value="Total a Pagar: "/> 
        <h:outputLabel id="valPagamento" value="#{comprarCreditoBean.valorPagamento}" required="true" requiredMessage=" *Campo obrigatório!"> 
         <f:convertNumber currencySymbol="R$" type="currency"/> 
        </h:outputLabel> 
<h:commandButton class="btn btn-default" value="Comprar" action="#{comprarCreditoBean.efetuarCompra}"/> 
       <h:button class="btn btn-default" value="Voltar" outcome="paginaPrincipal"/>  
     </h:form> 

Diese haben grundsätzlich die Konstruktion von meiner Seite, sind andere Dinge in Ordnung.

Mein template.xhtml ist auf diesem Code definiert:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:b="http://bootsfaces.net/ui" 
    xmlns:h="http://java.sun.com/jsf/html" version="2.0"> 

<h:head> 
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 
    <meta name="viewport" content="width=device-width" /> 

    <!-- CSS --> 
    <link rel="stylesheet" type="text/css" href="resources/css/estilo.css" /> 
    <link rel="stylesheet" type="text/css" href="resources/css/bootstrap.min.css" /> 
    <link rel="stylesheet" type="text/css" href="resources/css/bootstrap.css" /> 

    <!-- JS --> 
    <script src="resources/js/jquery.js"></script> 
    <script src="resources/js/bootstrap.min.js"></script> 

    <!-- Ícone Navegador --> 
    <link href="resources/imagens/icone.png" rel="shortcut icon" type="image/x-icon" /> 

    <title>e-BlueCard</title> 
</h:head> 
<h:body> 
    <f:view> 
     <div id="header" align="center"> 
      <ui:include src="/menu.xhtml" /> 
     </div> 

     <ui:insert name="corpo-da-pagina">Conteúdo</ui:insert> 

     <div class="well well-sm" align="center"> 
      <div id="footer" align="center"> 
       <span id="rodape">2016. Análise e Desenvolvimento de Sistemas - e-blue Card. Todos os direitos reservados.</span> 
      </div> 
     </div> 
    </f:view> 
</h:body> 

@Edit 2

ich eine interessante Sache gefunden habe. Ich habe versucht, auf Chrome-Browser zu öffnen und mit Hilfe der F12 die Konsole zu sehen, immer wenn ich versuchte, den Wert aus dem SelectOneMenu zu ändern, wird die Konsole von Browser zeigt den folgenden Fehler:

Error caught by Chrome

+0

helfen können: form' in einem einzigen p Alter (ohne Vorlage) und es hat gut für mich gearbeitet. Können Sie einen minimalistischen Code veröffentlichen, der zeigt, wie Sie Ihre Vorlage und Ihre 'h: form' integriert haben? – tfosra

+0

@tfosra Ich habe eine Ausgabe zu meiner Frage erstellt und den Vorlagencode und die Art und Weise, wie die Komponenten auf meinen Seiten verwendet werden, veröffentlicht. –

Antwort

0

Sie sollte eine Verbindung mit <html ...></html> wie dieser ist

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://xmlns.jcp.org/jsf/core" 
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets" 
    OTHER LIBRARIES HERE 
    > 

    <h:head> 
     HEADER CONTENT HERE 
    </h:head> 
    <h:body> 
     BODY CONTENT HERE 
    </h:body> 
</html> 

Hier <jsp:root ...> in Ihrer Vorlage ersetzen, die Sie ich habe Ihren Code mit einem einfachen `h getestet verstehen JSF templates

+0

Ich habe versucht, den Vorlagencode zu ändern, aber das Update für outputLabel funktioniert immer noch nicht. Der neue Template-Code beginnt mit und endet mit Ich habe alle JSP-Tags und den Librarie-Einschub ebenfalls entfernt. Danke, dass du geholfen hast! –

+0

Haben Sie eine Ausnahme in Ihrem Serverprotokoll? – tfosra

+0

Nein, leider gibt es keine Ausnahmen. Die Seite wird geladen, alle meine bestätigenden Nachrichten sind auch in Ordnung. Das einzige Problem ist der Wert von outputLabel. Wenn ich diesen Wert nicht aktualisieren kann, wird die Einfügung in meiner Datenbank (die funktioniert) mit dem Musterwert ausgeführt. –