h:未在请求作用域bean上调用commandButton操作方法

时间:2013-01-30 21:00:27

标签: jsf

我在jsf页面上有一个h:commandButton。它需要根据条件进行渲染。条件上的属性是页面的隐藏输入。指定渲染条件时,不会调用按钮上的操作方法。

有什么想法吗?

这是示例代码:

<h:commandButton value="Button" 
action="#{bean.method}"
rendered="#{bean.conditon}"
type="submit"/>

<h:inputHidden value="#{bean.condition}" />

1 个答案:

答案 0 :(得分:3)

我知道你的bean是请求作用域,否则你不会遇到这个问题。这是一个时间问题。

rendered属性也是在JSF生命周期的“应用请求值”阶段确定的。但是,提交的值仅在JSF生命周期的“更新模型值”阶段(稍后)中在模型中设置。因此,当评估rendered属性时,它不会从隐藏输入中获取提交的值,而是获取属性的默认值。

如果不能将请求范围更改为view scope,那么您需要以不同方式挽救此问题。将<h:inputHidden>更改为<f:param>并在@ManagedProperty地图上通过#{param}注入值的最简单方法之一:

<h:commandButton value="Button" 
    action="#{bean.method}"
    rendered="#{bean.conditon}"
>
    <f:param name="condition" value="#{bean.condition}" />
</h:commandButton>

(请注意,我省略了type="submit",因为它已经是默认值)

@ManagedProperty("#{param.condition}")
private boolean condition;

另见: