0

我正在尝试使用 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 对象这一事实有关。我怎样才能让它在这种情况下工作?

4

2 回答 2

1

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

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

于 2013-01-09T13:24:44.353 回答
0

如果您使用按钮进行 ajax 调用,则 javascript 无法在 dom 树中找到您的元素来呈现它,因为它首先不存在。

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

在jsf中使用ajax渲染组件

于 2013-01-09T12:01:28.327 回答