سؤال

لدي صفحة JSF التي أريد أن أحصل عليها خانة اختيار، عند النقر فوق، سيضيف / إزالة / إزالة بعض حقول النماذج الأخرى من الصفحة. هنا هو الرمز (المبسط) الذي لدي حاليا من مربع الاختيار:

<h:selectBooleanCheckbox title="showComponentToReRender" value="#{backingBean.showComponentToReRender}">
    <a4j:support event="onsubmit" reRender="componentToReRender" />
</h:selectBooleanCheckbox>

هنا هو رمز المكون الذي أريد إخفاءه:

<h:selectOneMenu id="componentToReRender" value="#{backingBean.value}" rendered="#{valuesList.rowCount>1 &amp;&amp; backingBean.showComponentToReRender}">
   <s:selectItems value="#{valuesList}" var="value"/>
</h:selectOneMenu>

حاليا، النقر فوق خانة الاختيار لا شيء؛ هذا "selectonemenu" لن يذهب بعيدا. ما الخطأ الذي افعله؟

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

المحلول

تحتاج إلى التفاف componentToReRender في أي:

<h:panelGroup id="componentToReRenderWrapper">

أو

<a4j:outputPanel id="componentToReRenderWrapper">

لذلك، سيكون لديك فعال:

<h:panelGroup id="componentToReRenderWrapper">
    <h:selectOneMenu id="componentToReRender" value="#{backingBean.value}" rendered="#{valuesList.rowCount>1 &amp;&amp; backingBean.showComponentToReRender}">
       <s:selectItems value="#{valuesList}" var="value"/>
    </h:selectOneMenu>
</h:panelGroup>

وتغيير reRender="componentToReRenderWrapper" في حال كنت تستخدم panelGroup, أو إزالة تلك السمة، في حالة استخدامها outputPanel.

وجدت التفسير الدقيق في ريتشفات. مستندات:

تشير المشكلة الأكثر شيوعا في استخدام Rerender إلى المكون الذي يحتوي على سمة "المقدمة". ملاحظة، لا يمثل JSF المكان الموجود في المستعرض دوم حيث يجب وضع نتائج المكون في حالة إرجاع الحالة "المقدمة" كاذبة. لذلك، بعد أن يصبح المكون مستخرج أثناء طلب AJAX، توفر Richfaces التعليمات البرمجية المقدمة إلى العميل، ولكنها لا تقوم بتحديث صفحة، لأن المكان للتحديث غير معروف. تحتاج إلى الإشارة إلى أحد المكونات الأصل التي لا تحتوي على سمة "المقدمة". كبديل، يمكنك التفاف المكون مع تخطيط = "لا شيء".

نصائح أخرى

لا تنسى تعيين AjaxRendered = "True" على A4J: الإخراج

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