<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