سؤال

<h:selectOneMenu id="selectOneMenu"  value="#{Bean1.val1}" >
    <f:selectItems value="#{Bean1.selectItems}"/>
    <a4j:support event="onchange" action="#{Bean1.onSelectOneMenuChange}" reRender="textbox1 , textbox2 , textbox3, textbox4"  />
 </h:selectOneMenu>

<h:inputText id="textbox1" value="#{Bean1.textbox1}"> </h:inputText>
<h:inputText id="textbox2" value="#{Bean1.textbox2}"> </h:inputText>
<h:inputText id="textbox3" value="#{Bean1.textbox3}"> </h:inputText>
<h:inputText id="textbox4" value="#{Bean1.textbox4}"> </h:inputText>

Bean1.onSelectOneMenuChange() سوف يغير قيمة Bean1.textbox1, Bean1.textbox2,Bean1.textbox3 و Bean1.textbox4(اعتمادًا على القيمة المحددة (Bean1.val1)). في بعض الأحيان ، سيغير جميع قيمة مربع النص وأحيانًا سيغير بعض قيمة مربع النص فقط.

عندما يقوم المستخدمون بتغيير القيمة في التحكم القائمة "SelectOnemenu" ، لن يقوم إطار JSF بالاتصال بمرحلة قيم طراز التحديث ولكن اتصل بـ Bean1.onSelectOneMenuChange() مباشرة. بعد ذلك ، كل مربع النص ريندر. نظرًا لعدم استدعاء مرحلة قيم طراز التحديث ، لا يتم تعيين القيم التي أدخلها المستخدم على Bean1 ولا تظهر القيمة الأصلية في مربع النص بعد reRender.

اريد أن أسأل:

  1. كيف يمكنني الاتصال يدويًا بمرحلة قيم طراز التحديث في الداخل Bean1.onSelectOneMenuChange()؟ كيف يمكنني الحصول على إدخال القيمة من قبل المستخدمين في الداخل Bean1.onSelectOneMenuChange() وتعيينه على الحقول المقابلة من Bean1?

  2. طريقة أخرى هي أن مربع النص فقط يتم تحديث قيمه داخل Bean1.Onselectonemenuchange (). على سبيل المثال ، ستغير القيمة جميع قيمة مربع النص وقد تغير القيم فقط بعض قيمة مربع النص. كيف يمكنني ذلك reRender مشروط؟ ما هي الطريقة التي تفضلها أكثر للصيانة؟

تحديث :

للنقطة 2 ، أجد أن Render Preperties من CAN CAN قبول تعبير EL ، لذلك حاولت استخدام

 <a4j:support event="onchange"  action="#{Bean1.onSelectOneMenuChange}" reRender="#{Bean1.reRenderIDList}"  /> .

داخل Bean1.Onselectonemenuchange () ، قمت بتعيين Bean1.RerenderIdList على مجموعة من المعرف المطلوب أن يكون Render بناءً على متطلبات العمل. ال Bean1.getRenderIDList() يعمل عندما يتم تحديث الصفحة. ومع ذلك ، عندما أقوم بتغيير قيمة <h:selectOneMenu> في واجهة المستخدم ، لن يتم تشغيل Bean1.GetRenderIdList () مرة أخرى. وبالتالي ، لا يمكن أن يكون مربع النص reRender?

اي فكرة؟

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

المحلول

الرمز الخاص بك يبدو جيدا. لا يوجد سبب لعدم حدوث مرحلة طراز التحديث (لا تستخدم immediate=true). وإذا كان لديك خطأ في المحادثة/التحقق من الصحة ، فلن يتم استدعاء الإجراء أبدًا. تحقق من المراحل التي تمر بها.

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