JSF2 commandButton; AJAX oder nicht AJAX, es aktualisiert die ganze Seite
dies ist ein einfaches Beispiel, das demonstriert der Fall.
haben Sie ein Formular mit einem Panel und zwei commandButton, einen AJAX der andere nicht. durch klicken auf einen von Ihnen, einen InputText erstellt, in der backing-bean und dem Fenster Hinzugefügt.
Mein managed bean:
@ManagedBean
public class DynamicPanel {
private Panel dynmaic;
public Panel getDynmaic() {
return dynmaic;
}
public void setDynmaic(Panel dynmaic) {
this.dynmaic = dynmaic;
}
public String adddynamic(){
InputText text = new InputText();
dynmaic.getChildren().add(text);
text.setValue(text.getId()+" Size= "+ dynmaic.getChildren().size());
return null;
}
public String removeall(){
this.dynmaic.getChildren().clear();
return null;
}
}
Meine XHTML-Seite
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui" xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form>
<p:panel id="dynamic" binding="#{dynamicPanel.dynmaic}">
</p:panel>
<h:commandButton value="Add with AJAX" id="ajaxBtn" >
<f:ajax onevent="onClick" execute="#{dynamicPanel.adddynamic()}" render="dynamic" />
</h:commandButton>
<h:commandButton value="Add" action="#{dynamicPanel.adddynamic}" />
<h:commandButton value="remove all" action="#{dynamicPanel.removeall}" />
</h:form>
</h:body>
</html>
meine faces-config.xml ist leer.
Nun, ich habe drei Probleme mit dem code oben. Könnte jemand bitte klären Sie es zu mir, ich bin neu in JSF2.
die erste ist, warum die beiden command Tasten Verhalten sich genauso? Klick auf äther würde man aktualisieren die ganze Seite.
die zweite Frage ist, warum der Klick auf die nicht-AJAX-commandButton fügt zwei Inputfieds gleichzeitig?
die Dritte ist, warum ändern Sie den Umfang der managed bean zu @SessionScoped gibt einen Fehler aus, sobald man die Seite lädt? ( irgendwie nur beim laden der Seite, das Formular sendet eine ajax-Anfrage, ohne mir einem Klick auf die Befehlsschaltfläche. Warum ist das so?
- Siehe den link unten. Ich bin nicht verstehen, warum die Angabe von execute="#{dynamicPanel.adddynamic()}" warum nicht "dynamisch" als Wert. mkblog.exadel.com/2010/04/...
- kann nicht öffnen Sie den link
- dont copy paste die url.. Klick drauf..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie Folgendes, das sollte besser funktionieren.
Soweit ich weiß, für
f:ajax
ausführen-Attribut die id der Komponenten sollte gegeben werden, und sollten Sie rufen Methoden wieaddDynamic()
im Attribut listener.Wenn Sie auf die nicht-ajax-button, sendet es die ganze form, in die auch Ihre ajax-Befehl. also im Grunde Ihre
addDynamic()
Funktion wird zweimal aufgerufen, eine durch ajax-Befehl und der zweite durch die nicht-ajax-Befehl..