سؤال

أقوم بإنشاء مكون مركب بسيط في 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}"/>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top