Wdrażam komponent złożony i znalazłem problem, którego nie znalazłem.JSF2.0 - Komponent kompozytowy z opcjonalnym wyrażeniem metody
Podałem jego atrybuty, które mogą być przekazane przez autora strony, ale nie mogłem podać atrybutu metody (wyrażenie metody do działania), które, jeśli nie zostało przekazane, komponent złożony nie użyj atrybutu method w tagu composite: implementation.
Oto mój kod:
<composite:interface>
<composite:attribute name="namePrompt" required="true"/>
<composite:attribute name="actionMethod" method-signature="java.lang.String action()" required="false"/>
<composite:attribute name="showComponent" default="false"/>
</composite:interface>
<composite:implementation>
<div>
<p:commandLink actionListener="#{cc.attrs.actionMethod}"
rendered="#{cc.attrs.showComponent}"
>
<h:outputText value="#{cc.attrs.namePrompt}"/>
</p:commandLink>
</div>
</composite:implementation>
Kiedy go za pomocą, nie określają atrybut "actionMethod". Tak:
<util:foo namePrompt="SomeName" showComponent="true"/>
Ale pojawia się komunikat o błędzie:
javax.faces.FacesException: Unable to resolve composite component from using page using EL expression '#{cc.attrs.actionMethod}'
Czy istnieje sposób to zrobić?
można przekazać opcjonalny atrybut 'actionListener'. Co to jest przypadek użycia, jak sądzisz, co powinno się stać, gdy 'actionListener' nie zostanie rozwiązany i renderowane jest' commandLink'? – partlov
Tak, komponent łącza jest renderowany, ale gdy kliknięcie odbywa się w komponencie Link, narzeka, że nie zdefiniowałem metody atrybutu actionMethod. Ale to jest moja intencja, czasami nie chcę definiować metody działania dla atrybutu actionMethod. czy to możliwe? Pomyślałem, że wprowadzenie "required = false" rozwiązuje problem. –