从托管bean更改呈现属性

时间:2013-01-09 10:33:37

标签: java jsf-2 managed-bean

我正在尝试使用JSF,方案如下:

我有一个会话范围的托管bean

@ManagedBean(name = "rand")
@SessionScoped

我已宣布以下内容(除其他外):

private UIOutput uiOutput;(plus getter and setter)

在我的facelets页面中我有

<h:outputLabel for="userGuess"  binding="#{rand.uiOutput}" 
value="#{rand.listSize}" rendered="false"/>

页面上有一个按钮,还有按钮的动作方法以及我有的其他东西

this.uiOutput.setRendered(true);

但它似乎不起作用,元素将不会被渲染。

如果将其作为渲染启动并更改属性(将其设置为true或false),则可以正常工作。 我怀疑它与以下事实有关:从未渲染的元素未绑定到我在托管bean中的uiOutput对象。在这种情况下,我怎样才能使它工作?

2 个答案:

答案 0 :(得分:1)

有一件事我改变了,现在它正在工作,我改变了按下按钮时运行的方法的返回类型,它返回一个字符串值,导航到同一页面,它现在返回null而JSF没有生成一个新视图,而不是渲染相同的视图,一切正常。

我想因为每次将渲染值设置为true或false时都会渲染一个新视图,因为每次在新视图上将组件设置为rendered =“false”时都无关紧要。

答案 1 :(得分:0)

如果你使用按钮进行ajax调用,那么javascript无法在dom树中找到你的元素来呈现它,因为它不在第一位。

这里有一个类似的问题可以更好地解释情况。

Render component with ajax in jsf