我在jsf页面上有一个h:commandButton。它需要根据条件进行渲染。条件上的属性是页面的隐藏输入。指定渲染条件时,不会调用按钮上的操作方法。
有什么想法吗?
这是示例代码:
<h:commandButton value="Button"
action="#{bean.method}"
rendered="#{bean.conditon}"
type="submit"/>
<h:inputHidden value="#{bean.condition}" />
答案 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;