Mam następujący kod w mojej strony facelet:Jak przekazać atrybut z komponentu kompozytowego do komponentu bean za pomocą komponentu zaplecza?
<hc:rangeChooser1 id="range_chooser"
from="#{testBean.from}"
to="#{testBean.to}"
listener="#{testBean.update}"
text="#{testBean.text}">
<f:ajax event="rangeSelected"
execute="@this"
listener="#{testBean.update}"
render=":form:growl range_chooser"/>
</hc:rangeChooser1>
To mój zespolonej:
<ui:component xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:cc="http://java.sun.com/jsf/composite"
xmlns:p="http://primefaces.org/ui">
<cc:interface componentType="rangeChooser">
<!-- Define component attributes here -->
<cc:clientBehavior name="rangeSelected" event="change" targets="hiddenValue"/>
<cc:attribute name="from" type="java.util.Calendar"/>
<cc:attribute name="to" type="java.util.Calendar"/>
<cc:attribute name="text" type="java.lang.String"/>
</cc:interface>
<cc:implementation>
<div id="#{cc.clientId}">
...
<p:inputText id="hiddenValue" value="#{cc.attrs.text}"/>
...
</div>
</cc:implementation>
</ui:component>
Jak mogę przekazać atrybuty from
, to
i text
ze składnika złożonego do tworzenia kopii Bean? Znaczy wstrzyknąć te wartości w składniku podłoża, a nie przez
<p:inputText id="hiddenValue" value="#{cc.attrs.text}"/>
Aktualizacja: jest bardziej poprawna definicja, co jest potrzebne: Umieć mutować obiekty, które mijam z backing bean
do composite component
wewnątrz backing component
z composite component
. Więc kiedy wykonuję process
lub execute
my composite component
otrzymuję zaktualizowane wartości.
To mój komponent podkład:
@FacesComponent("rangeChooser")
public class RangeChooser extends UIInput implements NamingContainer {
private String text;
private Calendar from;
private Calendar to;
@Override
public void encodeBegin(FacesContext context) throws IOException{
super.encodeBegin(context);
}
public String getText() {
String text = (String)getStateHelper().get(PropertyKeys.text);
return text;
}
public void setText(String text) {
getStateHelper().put(PropertyKeys.text, text);
}
/*
same getters and setters for Calendar objects, from and to
*/
}
po prostu nie mogę zrozumieć, jak mogę przejść? Generalnie muszę pobrać wartość z <p:inputText id="hiddenValue" value="#{cc.attrs.text}"/>
i przekonwertować ją na dwa obiekty kalendarzy: from
i to
. Będzie świetnie, jeśli ktoś wskaże mi właściwy kierunek. Wiem, że muszę użyć getAttributes().put(key,value)
, ale nie wiem, gdzie umieścić ten kod. Z góry dziękuję.
http://stackoverflow.com/questions/5460524/jsf-2-composite-component-passing-attributes-to-backing-bean Myślę, że to ci pomoże. ;) – xild
Nie jest jasne, co chcesz osiągnąć. Czy są 'from' i' to' wejściami i jest 'tekstem' ciąg wyjściowy reprezentacja zakresu? –
@MicheleMariotti, no ** from ** i ** to ** powinny być obiektami 'Calendar'. Kiedy zmienię ** Zakres ** w ** komponencie kompozytowym **, powinien on również zmienić te wartości w komponencie bean. Tekst służy wyłącznie do celów testowych. Właściwie już wiem, jak to zrobić, ale jeśli obuduję 'from' i' to' w jednym obiekcie i ustawię go za pomocą 'getSubmittedValue', ale wątpię, czy można to zrobić w dwóch obiektach oddzielnie. – Anatoly