سؤال

مشكلتي هي أن ريتشفس reRender لا يعمل "تحت" العنصر الحالي في شجرة العناصر ؛ فقط العناصر العليا تحصل على إعادة صياغة.

هل هناك أي طريقة للوصول إلى العناصر السفلية مع Ajax؟

سيكون موضع تقدير أي مساعدة! دانيال

تعديل لقد قمت بتحرير هذا السؤال إلى سؤال أكثر عمومية. انظر المراجعات إذا كنت مهتمًا بالسؤال الأصلي.

هل كانت مفيدة؟

المحلول 2

هنا مثال حيث changePanel111() يغير محتوى عنصر أقل:

<h:form id="form" prependId="true">
    <rich:panel id="PANEL1">
        <h:outputText id="PANEL1TEXT" value="#{ajaxTestBean.panel1}"/>
        <rich:panel id="PANEL11">
            <h:outputText id="PANEL11TEXT" value="#{ajaxTestBean.panel11}"/>
            <rich:panel id="PANEL111">
                <h:outputText id="PANEL111TEXT" value="#{ajaxTestBean.panel111}"/>
            </rich:panel>
        </rich:panel>
        <rich:panel id="PANEL12">
            <h:outputText id="PANEL12TEXT" value="#{ajaxTestBean.panel12}"/>
            <br/>
            <a4j:commandLink value="CHANGE PANEL12" action="#{ajaxTestBean.changePanel12}">
                <a4j:support reRender="PANEL12" event="onclick"/>
            </a4j:commandLink>
            <br/>
            <a4j:commandLink value="CHANGE PANEL111" action="#{ajaxTestBean.changePanel111}">
                <a4j:support reRender="form:PANEL111" event="onclick"/>
            </a4j:commandLink>
        </rich:panel>
    </rich:panel>
</h:form>

لاحظ كيف يجب تحديد العنصر السفلي على أنه form:PANEL111.

أتمنى أن يساعدك هذا!

نصائح أخرى

  • reRender يعمل مع توفير id من الكائن المستهدف الذي تريد إعادة صياغته (داخل نفس حاوية التسمية - form في أغلب الأحيان)
  • ال id يجب أن تكون سلسلة فريدة ، وفقًا لمواصفات HTML
  • reRender يسمح بالقيمة الديناميكية - أي reRender="#{myBean.currentItemsToRerender}

بناءً على ذلك ، أعتقد أنك يجب أن تكون قادرًا على تحقيق ما تريد (على الرغم من أنه ليس واضحًا تمامًا)

تحديث:

UIComponent.findComponent(..) لديه خوارزمية محددة جيدًا لحل المعرفات. لذلك يجب الرجوع المطلق أبدا ب : ثم تابع من خلال التسلسل الهرمي للحاويات التسمية.

يمكن أن يشير Render إلى أي مكون خارج النموذج أيضًا. على سبيل المثال هذا يعمل:

<h:form>
  <a4j:commandButton reRender="panel"/>
</h:form>

<h:panelGrid id="panel">
...
</h:panelGrid>

لتطبيق MyFaces+Richfaces الخاص بي ، <rich:panel> لم تكن العلامة تعمل كما هو موضح في الإجابة المحددة. عندما غيرتها إلى <a4j:outputPanel ajaxRendered="true" />, ، بدأت العمل كما هو موضح هنا "u003Ca4j:commandLink>لا إعادة التجديد"

التكوين: MyFaces 2.1.10 (Facelets المستخدمة في templating) و Richfaces 4.2.3.

أتمنى أن يساعد هذا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top