【问题标题】:(Primefaces + JSF) error in tab ajax选项卡 ajax 中的(Primefaces + JSF)错误
【发布时间】:2012-03-24 18:00:35
【问题描述】:

我的代码:

<h:form id="form">
            <p:tabView dynamic="true" id="tabform" orientation="left">
                <p:tab id="tab1" title="Tree">
                    <p:growl id="messages" showDetail="true" />
                    <p:panel style="float:left">
                        <p:tree value="#{treeBean.root}" var="node" dynamic="true" cache="false"  
                                selectionMode="single"  selection="#{treeBean.selectedNode}" id="tree" >  
                            <p:ajax event="expand" update=":form:tabform:tab1" listener="#{treeBean.onNodeExpand}" /> 

我有一个错误:http://i283.photobucket.com/albums/kk308/breakbk/Untitled-1.jpg

请解释一下原因,谢谢你的建议:)

【问题讨论】:

  • 它是否适用于update=@form
  • 是的,它适用于 update=@form :|
  • 我不想全部更新,因为表单有很多组件。
  • @user1254072:请在此处复制并粘贴错误。这样,当图片链接挂掉时,它仍然存在,并且可以通过搜索找到。

标签: jsf-2 primefaces


【解决方案1】:

这似乎是p:ajax更新attribute时id错误的问题。

查看页面呈现的 html 源代码并确定选项卡的正确 ID。也许你错过了 id 字符串中的一个子组件。

【讨论】:

  • id 是 ":form:tabform:tab1",如你所见 id flow: form->tabform->tab1
  • 这真的是浏览器中html源的id吗?结尾的“:”表示不是。
  • html 来源:
  • 所以id字符串是正确的。因此,从理论上讲,它应该有效。如果更新整个 tabview 会怎样?
  • 对不起。如果 update=":form:tabform:tab1",它可以工作。但是 update=":form:tabform:tab1:messages" 它报告了上面的错误:|我有很多组件,所以我不想更新整个 tabview。
【解决方案2】:

您可以使用以下解决方案

您可以将要呈现的元素绑定到将存在于请求范围内的哈希图

而不是在render 属性中使用该绑定,它可能听起来很复杂,但它不是

这里是一个例子

通过 faces-config.xml 在请求范围内放置一个 HashMap:

<managed-bean>
    <description>Holder of all component bindings.</description>
    <managed-bean-name>components</managed-bean-name>
    <managed-bean-class>java.util.HashMap</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

比这样使用它:

<p:message binding="#{components.myMessage}"></p:message>

 <p:tab binding="#{components.myTabName}"></p:tab>

最后渲染成这样

<p:ajax event="expand" update="#{components.myMessage.clientId}" listener="#{treeBean.onNodeExpand}"></p:ajax>

<p:ajax event="expand" update="#{components.myTabName.clientId}" listener="#{treeBean.onNodeExpand}"></p:ajax>

此解决方案取自 BalusC 关于如何获取 id look here...的旧答案...

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签