Java JSF+;Primefaces:问题在于;“提供”;使用ajax的组件

Java JSF+;Primefaces:问题在于;“提供”;使用ajax的组件,java,jsf,primefaces,Java,Jsf,Primefaces,编辑 似乎无法使渲染正确使用更新属性。这是我的密码 <ui:define name="left"> <h:form> <p:commandLink value="Hey" actionListener="#{bean.setRenderComment}" update="comment"/> </

编辑
似乎无法使
渲染
正确使用
更新
属性。这是我的密码

        <ui:define name="left">
            <h:form>
                <p:commandLink value="Hey"
                actionListener="#{bean.setRenderComment}"
                update="comment"/>
            </h:form>
       </ui:define>
       <ui:define name="right">
            <h:panelGroup id="comment" rendered="#{bean.renderComment}">
                hello
            </h:panelGroup>
       </ui:define>

好的,每次我点击链接
Hey
,我都需要刷新以打开或关闭渲染
hello
。如何修复它,这样我就不需要刷新,因为ID为
comment
的组件不是表单的子组件(一个
UINamingContainer
组件),所以需要在ID前面加
以指示JSF从“上层”扫描

这应该做到:

<p:commandLink value="Hey"
    actionListener="#{bean.setRenderComment}"
    update=":comment" />

我在项目中使用的不是Primefaces,而是Richfaces。因此,我并不知道Primefaces是如何完成刷新过程的。然而,我有一个想法,可以很容易地测试

您的问题可能是由于在HTML页面上找不到要重新呈现(即更新)的组件。如果您的
呈现的
属性等于
,则带有
注释的
id不集成在生成的HTML页面中。因此,当客户端接收到Ajax请求时,Ajax引擎无法刷新此
,因为找不到它

因此,您可以做的是始终呈现
panelGroup
,并将
rendered
属性移动到包含Hello消息的嵌套

以下是我的建议:

<h:panelGroup id="comment">
    <h:outputText value="Hello" rendered="#{bean.renderComment}"/>
</h:panelGroup>


这样,在Ajax调用之后,panelGroup将始终刷新,并且它将包含Hello消息或不包含Hello消息,这与bean的
renderComment
属性的值有关。

Ohh-wow。我不知道
update
只能在同一级别上工作。如果我有多个级别呢。我尝试了
::comment
,但它不起作用。你能看看我的最新帖子吗?@Harry:romaintaz把它钉牢了。谢谢。它是有效的:)。我之所以使用
panelGroup
是因为,我有许多组件,我只想使用一个
rendered
属性来启用或禁用它们。如果我必须这样做,我想,我还是把
panelGroup
拿出来吧。非常感谢男士:D
<h:panelGroup id="comment">
    <h:outputText value="Hello" rendered="#{bean.renderComment}"/>
</h:panelGroup>