Jsf 如何使用基本面刷新页面的引用部分';p:commandLink?

Jsf 如何使用基本面刷新页面的引用部分';p:commandLink?,jsf,layout,primefaces,commandlink,Jsf,Layout,Primefaces,Commandlink,环境:Tomcat6、JSF2.0、prime faces 2.2.1、chrome浏览器 我想单击左侧展开树中的“ViewDetail”链接,并显示产品的详细信息。但是下面的代码不起作用。 然后我将属性ajax=“false”添加到链接中,这似乎是可行的。但是页面左侧的“p:treeTable”是 还刷新和崩溃。那么我该怎么做呢:单击左侧展开树节点上的链接,在右侧部分显示信息 ,并保持左侧展开的树节点仍处于展开状态 <h:form id="BizTypeTreeTableForm" &g

环境:Tomcat6、JSF2.0、prime faces 2.2.1、chrome浏览器

我想单击左侧展开树中的“ViewDetail”链接,并显示产品的详细信息。但是下面的代码不起作用。 然后我将属性ajax=“false”添加到链接中,这似乎是可行的。但是页面左侧的“p:treeTable”是 还刷新和崩溃。那么我该怎么做呢:单击左侧展开树节点上的链接,在右侧部分显示信息 ,并保持左侧展开的树节点仍处于展开状态

<h:form id="BizTypeTreeTableForm" >
        <p:layout fullPage="true">
            <p:layoutUnit id="left" position="left" scrollable="true"     width="350" resizable="true" closable="false" collapsible="true" minWidth="250" >
                  <p:treeTable id="BizTypeTreeTable" value="#    {treeTableController.root}" var="treeTable">
                      <p:column>
                              <f:facet name="header">ProductName</f:facet>
                              <h:outputText value="#{treeTable.TYPENAME.value }" />
                          </p:column>
                          <p:column style="width:5%">
                              <f:facet name="header">Action</f:facet>
                              <p:commandLink value="ViewDetail" update="content"      action="#{treeTableController.showDetail}">
                              </p:commandLink>
                      </p:column>
                      </p:treeTable>
            </p:layoutUnit>
            <p:layoutUnit id="center" rendered="true" position="center"    style="text-align:left;" scrollable="true" >
                <h:outputText value="Please click the left tree node" rendered="#    {allTabManager.productObject.TypeNo.value eq null}"/>
            <div id="content" class="ui-widget">
                    <div class="post">
                    <ui:insert name="content_tab" >...</ui:insert>
                </div>
                </div>
            </p:layoutUnit>
         </p:layout>
    </h:form>

产品名称
行动
...

我认为您对id的引用不正确,因为
div
p:layout
不是同一级别

但是您可以尝试使用
update=“:content”
获取绝对id,或者更新整个
p:layoutUnit

<p:commandLink value="ViewDetail" 
               update="center" 
               action="#{treeTableController.showDetail}">

更新必须指向树中真正的JSF组件,而不是普通的HTML元素

替换

<div id="content" class="ui-widget">



带有
layout=“block”
的panelgroup将呈现
而不是

thx。对于您的回复,我尝试了update=“:content”,甚至附加了表单id,但它不起作用。您是否尝试像我回答的代码示例中那样更新布局单元?我不知道是否可以用jsf ajax调用更新非jsf元素(div)。是的,我已经这样做了,但它也不起作用。我在控制台上看到了日志。它显示了点击操作触发了jsf的整个生命周期。这个问题还有其他原因吗?
p:layoutUnit
是如何在html中呈现的?背景是,您只能更新呈现的html页面中实际存在的组件。有时用
p:panelGroup
包装有问题的组件会有所帮助(你可以尝试包装你的
p:layoutUnit
。这将在html中呈现为
span
,即使没有呈现panelGroup的内容,它也在那里。另一个想法是:查看html源代码中的id,并将它们与facelet中使用的id进行比较。我已经完成了你上面所说的工作,id就是正确的id。)我想更新。真奇怪!在替换了上面的代码之后,这个页面的正确内容部分仍然没有刷新。我已经检查了我的html源代码,
h:panelGroup
确实呈现了一个div和一个名为
content
p:commandLink
的id呈现了一个onclick事件和一个ajax小部件,并更新了
ccontent
div。我也将div替换为
,但再次失败。生成的panelgroup的
id
是什么?在它前面加上
前缀,并在commandlink的
update
属性中完全设置。好!命令链接的html源代码:
html源代码:
..
好,the更新应该是
update=“:BizTypeTreeTableForm:content”
。不要更改组件ID!
<h:panelGroup layout="block" id="content" class="ui-widget">