Comment envoyer des valeurs d'entrée de formulaire et invoquer une méthode dans JSF bean
je construis une application JSF. J'ai défini l'interface graphique et j'ai fait les instructions select interroger la base de données en utilisant select.
Maintenant je dois faire les instructions d'insertion, mais je ne sais pas comment lire le value
du JSF composant d'entrée comme <h:inputText>
et l'envoyer à mon haricot qui effectue l'insertion.
la valeur <h:inputText>
devrait-elle être mappée par faces-config.xml
, pour que je puisse l'avoir dans mon code Java?
1 réponses
vous devez mettre tous les composants <h:inputXxx>
/ <h:selectXxx>
dans un <h:form>
et lier leur attribut value
à une propriété bean via une expression EL comme #{bean.property}
, soutenue par une paire getter/setter. Lorsqu'elle est correctement définie, JSF définira automatiquement les valeurs dans le bean lorsque le formulaire est soumis via un composant <h:commandXxx>
dans la même forme. Vous pouvez spécifier une méthode d'action bean dans l'attribut action
du composant <h:commandXxx>
via une expression EL comme #{bean.action}
, qui pointe vers la méthode nue action()
. Toutes les valeurs soumises sont immédiatement disponibles en Java.
étant donné cet exemple de formulaire JSF avec un champ d'entrée et un champ select:
<h:form>
<h:inputText value="#{bean.text}" required="true" />
<h:selectOneMenu value="#{bean.choice}" required="true">
<f:selectItem itemValue="#{null}" />
<f:selectItem itemValue="One" />
<f:selectItem itemValue="Two" />
<f:selectItem itemValue="Three" />
</h:selectOneMenu>
<h:commandButton value="submit" action="#{bean.submit}" />
<h:messages />
<h:outputText value="#{bean.result}" />
</h:form>
la fève suivante imprime les valeurs soumises au stdout, prouvant que JSF a déjà fixé les valeurs bien avant le moment où vous y accédez dans la méthode d'action.
package com.example;
import javax.inject.Named;
import javax.enterprice.context.RequestScoped;
@Named // Use @javax.faces.bean.ManagedBean on outdated environments.
@RequestScoped // Use @javax.faces.bean.RequestScoped on outdated environments.
public class Bean {
private String text;
private String choice;
private String result;
public void submit() {
result = "Submitted values: " + text + ", " + choice;
System.out.println(result);
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getChoice() {
return choice;
}
public void setChoice(String choice) {
this.choice = choice;
}
public String getResult() {
return result;
}
}
C'est tout. Transformer la forme régulière en forme ajax est une question d'imbriquer un <f:ajax>
dans le composant de commande comme ci-dessous.
<h:commandButton value="submit" action="#{bean.submit}">
<f:ajax execute="@form" render="@form" />
</h:commandButton>
vous pouvez trouver un autre exemple et des liens utiles au bas de notre page wiki JSF .
veuillez noter que ce que vous avez l'intention de faire avec les valeurs soumises est au-delà de la responsabilité de JSF. Par exemple, la manipuler, passer dans une autre classe, la sauvegarder dans une base de données, etc. Aucun tout cela est lié au JSF. Il a comme étant un cadre de forme HTML a déjà fait son travail de vous fournir les valeurs soumises dans la saveur des variables Java utilisables. Le reste est à vous.
pour étudier la prochaine étape, vous devriez à ce point faire comme si vous aviez déjà un tas de variables préparées / codées en dur au lieu d'une interface utilisateur basée sur JSF entière. Par exemple, pour sauvegarder les valeurs dans une base de données, les gens utilisent habituellement un service d'affaires layer framework comme EJB qui à son tour utilise un layer framework comme JPA. Certaines personnes utilisent même "vanille simple" JDBC pour cela. Pour plus de liens vers des exemples concrets, commencez ici: contrôleur JSF, Service et DAO .