将参数传递给JSF动作 [英] Passing parameter to JSF action

查看:104
本文介绍了将参数传递给JSF动作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用GlassFish 3.1,并试图将参数传递给commandButton动作.以下是我的代码:

I'm using GlassFish 3.1, and trying to pass parameter to commandButton action. Following is my 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类

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 .

When I click submit button, I get javax.el.MethodNotFoundException.

如果我删除<f:param ... />并按如下所示传递参数,

If I remove <f:param ... /> and pass parameter as follows,

.
:
        <h:commandButton id="actionButton" value="Submit"
            action="#{bean.submit(123)}">
        </h:commandButton>
:
.

可以.

但是我在想第一种方法(使用f:param)是正确的.

But I was thinking first way (using f:param) is correct one.

哪种是正确的参数传递方式?

Which is the correct way to pass parameter?

谢谢.

推荐答案

<f:param>设置HTTP请求参数,而不是操作方法参数.要获取它,您将需要使用<f:viewParam>@ManagedProperty.在这种特定情况下,后者更为合适.您只需要用JSF注释替换CDI注释即可使@ManagedProperty起作用:

The <f:param> sets a HTTP request parameter, not an action method parameter. To get it, you would need to use <f:viewParam> or @ManagedProperty. In this particular case, the latter is more suitable. You only have to replace CDI annotations by JSF annotations in order to get @ManagedProperty to work:

@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的Servlet 3.0容器(Tomcat 7,Glassfish 3,JBoss AS 6等)为目标时,您应该可以只传递参数直接进入EL的action方法,这是EL 2.2(它是Servlet 3.0的一部分)所支持的:

When you're targeting a Servlet 3.0 container (Tomcat 7, Glassfish 3, JBoss AS 6, etc) with a web.xml whose <web-app> root declaration definies Servlet 3.0, then you should be able to just pass the parameter straight into the action method by EL as that's supported by EL 2.2 (which is part of Servlet 3.0):

<h:commandButton id="actionButton" value="Submit"
    action="#{bean.submit(123)}">
</h:commandButton>

使用

public String submit(Integer param) {
    System.out.println("Submit using value " + param);
    return null;
}

如果您以旧的Servlet 2.5容器为目标,那么您仍然应该能够使用JBoss EL做到这一点.另请参阅以下答案以获取安装和配置详细信息:调用直接方法或带有参数的方法/EL中的变量/参数

If you target an old Servlet 2.5 container, then you should still be able to do this using JBoss EL. See also this answer for installation and configuration details: Invoke direct methods or methods with arguments / variables / parameters in EL

这篇关于将参数传递给JSF动作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆