我正在使用GlassFish 3.1,并尝试将参数传递给commandButton操作。以下是我的代码:
的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" />
面-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类
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;
}
}
最后,
查看
<?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>
当我点击提交按钮时,我得到 javax.el.MethodNotFoundException 。
如果我删除<f:param ... />
并按如下方式传递参数,
.
:
<h:commandButton id="actionButton" value="Submit"
action="#{bean.submit(123)}">
</h:commandButton>
:
.
它运作正常。
但我在想第一种方法(使用f:param)是正确的。
传递参数的正确方法是什么?
提前致谢。
答案 0 :(得分:5)
<f:param>
设置HTTP请求参数,而不是操作方法参数。要获得它,您需要使用<f:viewParam>
或@ManagedProperty
。在这种特殊情况下,后者更合适。您只需要通过JSF注释替换CDI注释,以使@ManagedProperty
起作用:
@ManagedBean(name="bean")
@RequestScoped
public class ActionParam {
@ManagedProperty("#{param.param}")
private Integer param;
public String submit() {
System.out.println("Submit using value " + param);
return null;
}
}
当您使用web.xml
<web-app>
根声明定义Servlet 3.0的<h:commandButton id="actionButton" value="Submit"
action="#{bean.submit(123)}">
</h:commandButton>
定位Servlet 3.0容器(Tomcat 7,Glassfish 3,JBoss AS 6等)时,您应该能够只需将参数直接传递给EL的动作方法,因为EL 2.2支持它(它是Servlet 3.0的一部分):
public String submit(Integer param) {
System.out.println("Submit using value " + param);
return null;
}
与
{{1}}
如果你的目标是旧的Servlet 2.5容器,那么你仍然可以使用JBoss EL来做到这一点。有关安装和配置详细信息,请参阅此答案:Invoke direct methods or methods with arguments / variables / parameters in EL