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:
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
@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. –