Bu gerçekten işe yaramayacaktır. Bundan sonra "ekstra" parametreleri geçemezsiniz. Bildirdiğiniz gibi, method-signature
, kompozit bileşenin kullanıldığı tarafta yerine getirilmelidir. Örneğin. İstediğin bu değil ne olduğunu ve gerçekten üzerinde kompozit komponent tarafında geçmek istiyorsanız
<my:button action="#{bean.remove('Somestring')}" />
kompozit bileşen uygulama sadece o zaman ben can, bu
<h:commandButton value="Remove" action="#{cc.attrs.removeFieldAction}" />
gibi görünmelidir Ekstra argümanları iletmenin iki yolunu düşünün: bir eylem dinleyicisi ile <f:attribute>
'u bir attidional component özniteliği olarak geçirmek için kullanın veya JSF'nin eylemi çağırılmadan hemen önce bir özellik olarak ayarlamasına izin vermek için <f:setPropertyActionListner>
. Ancak, her ikisinden hiçbiri bileşik bileşende değişiklik yapmaz. Kompozit bileşenin bir özelliği olarak en azından tüm fasulye için talep etmeniz gerekir.
<f:setPropertyActionListener>
ile ilgili bir örnek. Bu, eylem çağrılmadan hemen önce özelliği ayarlar. olduğu
<composite:interface>
<composite:attribute name="bean" type="java.lang.Object" />
<composite:attribute name="action" type="java.lang.String" />
<composite:attribute name="property" type="java.lang.String" />
</composite:interface>
<composite:implementation>
<h:commandButton value="Remove" action="#{cc.attrs.bean[cc.attrs.action]}">
<f:setPropertyActionListener target="#{cc.attrs.bean[cc.attrs.property]}" value="Somestring" />
</h:commandButton>
</composite:implementation>
Yukarıdaki örnek ile
<my:button bean="#{bean}" action="removeFieldAction" property="someString" />
olarak kullanılmak üzere, fasulye, belirli bir kongre bağlı kalırsa belki hatta atlayabilirsiniz
public class Bean {
private String someString;
public void removeFieldAction() {
System.out.println(someString); // Somestring
// ...
}
// ...
}
gibi görünmelidir property
özniteliği tamamen.
Tnx. Fikir, kompozit bileşenin, her alanın fasulye içindeki bir nesneye bağlı olduğu bir alan listesi oluşturmasıdır. Bir alan UI'den çıkarıldıktan sonra, çekirdek çıkarılmış alanın ID'sine bildirilmeli ve böylece bakladan da alınacaktır. Bu nedenle, 'someString' parametresi aslında kaldırılan alanın UUID'sidir. Ben pratikte, bir argüman ile bir olay dinleyiciye benzer bir şey elde etmeye çalışıyorum ... Çözüm için teşekkürler! – Ben
Merhaba BalusC. Bu cevap için çok teşekkür ederim. Bu Mojarra üzerinde çalışır, ancak MyFaces üzerinde çalışmıyor gibi görünüyor. Burada ayrı bir sorun yayınladım, lütfen vaktiniz olduğunda lütfen bir göz atın lütfen? http://stackoverflow.com/questions/17357593/passed-argument-to-method-inside-composite-component-does-not-work-on-myfaces Çok teşekkür ederim –