У меня есть следующий код на моей странице facelet:Как передать атрибут из составного компонента в бэкэйн-бэк с помощью компонента backing?
<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>
Это мой составной компонент:
<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>
Как передать атрибуты from
, to
и text
из составного компонента для резервного боб? Я имею в виду вводить эти значения в бэк-компонента, а не через
<p:inputText id="hiddenValue" value="#{cc.attrs.text}"/>
Update: есть более правильное определение того, что мне нужно: Уметь мутировать объекты, которые я прохожу от backing bean
к composite component
внутри backing component
из composite component
. Поэтому, когда я выполняю process
или execute
мой composite component
Получаю обновленные значения.
Это моя поддержка компонента:
@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
*/
}
Я просто не могу понять, как я могу двигаться дальше? В общем, мне нужно принять значение от <p:inputText id="hiddenValue" value="#{cc.attrs.text}"/>
и преобразовать его в два объекта Календари from
и to
. Будет здорово, если кто-нибудь может указать мне в правильном направлении отсюда. Я знаю, что мне нужно использовать getAttributes().put(key,value)
, но не знаю, где разместить этот код. Спасибо заранее.
http://stackoverflow.com/questions/5460524/jsf-2-composite-component-passing-attributes-to-backing-bean Я думаю, что это поможет вам. ;) – xild
Не совсем понятно, чего вы хотите достичь. Являются ли значения 'from' и' to' и являются 'text' выходным строковым представлением диапазона? –
@ MicheleMariotti, no ** from ** и ** to ** должен быть в объектах «Календарь». Когда я изменяю ** Диапазон ** в ** составном компоненте **, он должен также изменить эти значения в бэкэнде. Текст предназначен только для тестирования. На самом деле я уже знаю, как это выполнить, но если я инкапсулирую 'from' и' to' в один объект и устанавливаю его через 'getSubmittedValue', но я сомневаюсь, что это можно сделать в двух объектах отдельно. – Anatoly