Передача параметра в действие JSF - PullRequest
2 голосов
/ 13 сентября 2011

Я использую 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) правильный.

Как правильно передать параметр?

Заранее спасибо.

1 Ответ

5 голосов
/ 13 сентября 2011

<f:param> устанавливает параметр HTTP-запроса, а не параметр метода действия. Чтобы получить его, вам нужно будет использовать <f:viewParam> или @ManagedProperty. В данном конкретном случае последний больше подходит. Вам нужно только заменить аннотации CDI на аннотации JSF, чтобы заставить @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;
    }

}

Когда вы нацеливаетесь на контейнер Servlet 3.0 (Tomcat 7, Glassfish 3, JBoss AS 6 и т. Д.) С web.xml, корневое объявление которого <web-app> определяет Servlet 3.0, тогда вы сможете просто передать параметр прямо в метод действия EL, который поддерживается EL 2.2 (который является частью 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...