JSF RichFaces reRender事件变化丰富:dataGrid结构

时间:2012-05-24 17:21:42

标签: datagrid jboss richfaces seam ajax4jsf

我正在寻找关于如何在重新渲染数据网格时处理奇怪效果的提示。我有以下网格结构:

<rich:dataGrid id="allProductsGrid" value="#{allProducts}" var="_product">                       
     <s:div styleClass="grid-element">
         <s:link view="/product.xhtml">
             <s:div styleClass="product-element">                                                                                                           
                 <h:graphicImage value="/content/images?id=#{_product.image.id}&amp;width=170"/>                                                                                                                                                                                                                                        
             </s:div>                           
             <div id="title">
                 <h:outputText value="#{_product.name}" />
             </div>
             <f:param name="productId" value="#{_product.id}" />
        </s:link>                                                                
     </s:div>
 </rich:dataGrid>

网格在搜索输入字段触发的onkeyup事件上获得reRendered。到目前为止没有魔法。现在问题是reRendering改变了生成的html(DOM)的结构。结果链接不再起作用了。

第一次呈现页面时的firebug-html-inspect如下:

 <div id="j_id86:allProductsGrid:0:j_id124" class="grid-element">
    <a id=".. " onclick=".." href="/portal/product.vc?productId=22&cid=69">
        <div id="j_id86:allProductsGrid:0:j_id126" class="product-element">
            <img src="/portal/content/images?id=&width=170">
        </div>
        <div id="title">Sample Product</div>
    </a>
</div>

重新渲染网格后,html输出为:

<div id="j_id86:allProductsGrid:0:j_id124" class="grid-element">
    <a id=".." onclick=".." href="/portal/product.vc?productId=22&cid=76"></a>
    <div id="j_id86:allProductsGrid:0:j_id126" class="product-element">
        <img src="/portal/content/images?id=&width=170">
    </div>
    <div id="title">Sample Product</div>
</div>

结果是a-tag不再包装product-element。任何人都可以给我一个关于这里可能出错的提示吗? 任何帮助赞赏。 提前谢谢。

约什

ps:使用Seam 2.2.2 / JSF Mojarra 2.0.3 / RichFaces 3.3.3

1 个答案:

答案 0 :(得分:0)

确保您的allProducts bean具有ViewScope而不是RequestScope。因此,在重新渲染时,数据将在呼叫中持续存在。