Passage de paramètre à la JSF action
Je suis en utilisant GlassFish 3.1, et en essayant de passer le paramètre de contrôle commandButton action. Voici mon code:
beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd" />
faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" />
ManagedBean classe
package actionParam;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
@Named("bean")
@RequestScoped
public class ActionParam {
public ActionParam() {
super();
}
public String submit(int param) {
System.out.println("Submit using value " + param);
return null;
}
}
et enfin,
Vue
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<meta http-equiv="Content-Type"
content="text/html; charset=ISO-8859-1" />
<title>Test Action Param</title>
</h:head>
<h:body>
<h:form id="actionForm">
<h:commandButton id="actionButton" value="Submit"
action="#{bean.submit}">
<f:param name="param" value="123"></f:param>
</h:commandButton>
</h:form>
</h:body>
</html>
Quand j'ai cliquer sur le bouton soumettre, je reçois javax.el.MethodNotFoundException.
Si je supprime <f:param ... />
et passer le paramètre comme suit,
.
:
<h:commandButton id="actionButton" value="Submit"
action="#{bean.submit(123)}">
</h:commandButton>
:
.
il fonctionne OK.
Mais je pensais première manière (à l'aide de f:param) est correcte.
Qui est la bonne façon de passer des paramètres?
Merci d'avance.
Vous devez vous connecter pour publier un commentaire.
La
<f:param>
définit un paramètre de la requête HTTP, pas une action paramètre de méthode. Pour l'obtenir, vous devez utiliser<f:viewParam>
ou@ManagedProperty
. Dans ce cas particulier, ce dernier est plus adapté. Vous n'avez qu'à remplacer le CDI annotations par JSF annotations afin d'obtenir@ManagedProperty
de travail:Lorsque vous ciblez un conteneur de Servlet 3.0 (Tomcat 7, Glassfish 3, JBoss as, 6, etc) avec un
web.xml
dont<web-app>
racine déclaration definies Servlet 3.0, alors vous devriez être en mesure de simplement passer le paramètre directement dans l'action, la méthode par EL, comme pris en charge par EL 2.2 (qui fait partie de la Servlet 3.0):avec
Si vous ciblez un ancien conteneur de Servlet 2.5, alors vous devriez toujours être en mesure de le faire à l'aide de JBoss EL. Voir aussi la réponse pour l'installation et la configuration de détails: Invoquer des méthodes directes ou des méthodes avec des arguments /les variables /paramètres dans EL