كيفية تمرير سلسلة الإجراء إلى مكون مركب JSF 2؟
-
27-09-2019 - |
سؤال
أقوم بإنشاء مكون مركب بسيط في JSF 2. ومع ذلك ، لا يمكنني تمرير سمة سلسلة إلى المكون المركب لاستخدامه في سمة الإجراء منu003Ch:commandLink> . مكوني يشبه:
<composite:interface>
<composite:attribute name="title" required="true" type="java.lang.String"/>
<composite:attribute name="view" required="true" />
</composite:interface>
<!--implementation-->
<composite:implementation>
<li><h:commandLink action="#{cc.attrs.view}" value="#{cc.attrs.title}" /></li>
</composite:implementation>
كيف يمكنني الحصول على سلسلة عمل في سمة الإجراء منu003Ch:commandLink> ؟
المحلول
يبدو أن هذا يجذب Horstmanns :-)
يجب عليك تسمية السمة "الإجراء" واستخدام إعادة الاستهداف. ثم يتم وصف بعض ركلات المناولة الخاصة في ذلك بوضوح رائع (لا) في
http://docs.oracle.com/javaee/6/javaserverfaces/2.0/docs/pdldocs/facelets/composite/attribute.html
و API Doc of ViewDeclArationLanguage.RetargetMethodexpressions (وليس ViewHandler) الذي لا يُسمح لي بالصيانة.
هنا كيف تفعلها.
<composite:interface>
<composite:attribute name="title" required="true" type="java.lang.String"/>
<composite:attribute name="action" targets="view" required="true" />
</composite:interface>
<!--implementation-->
<composite:implementation>
<li><h:commandLink id="view" value="#{cc.attrs.title}" /></li>
</composite:implementation>
نصائح أخرى
تحتاج إلى تحديد نوع السمة لتكون طريقة مثل هذه:
<composite:attribute name="view" method-signature="java.lang.String f()"/>
أو بدلاً من ذلك ، يتم التعامل مع بعض أسماء السمات خصيصًا في JSF. لذلك إذا قمت بتسمية سمة "الإجراء" ، فيجب أن تعمل أيضًا بدون توقيع الطريقة:
<composite:attribute name="action"/>
يحرر: ربما أسيء فهم السؤال ، إذا كنت ترغب في ربط معرف العرض دون استدعاء إجراء يمكنك استخدامه h:link
علامة بدلا من h:commandLink
:
<h:link outcome="#{cc.attrs.view}" value="#{cc.attrs.title}"/>