复合组件是否可以具有多个值。这是我想做的事的例子:
<foo:zipcode id="zipcode" value="#{bean.zipcode}" city="#{bean.city}" >
<f:ajax eventt="changeEvent" update="city">
</foo:zipcode>
<h:inputText id="city" value="#{bean.city} />
其中复合组件具有邮政编码的输入。输入后,我会查询/验证邮政编码并更新城市。
复合组件看起来像:
<cc:interface componentType="component.zipCode">
<cc:attribute name="value" required="true" />
<cc:attribute name="city" />
</cc:interface>
<cc:implementation>
<p:inputText id="zipCode" value="#{cc.attrs.value}" >
<p:ajax partialSubmit="true" process="@this" update="@this" listener="#{cc.lookupZip}"/>
</p:inputText>
</cc:implementation>
然后是我拥有的后援组件:
@FacesComponent(value = "component.zipCode")
public class UIZipCode extends UIInput implements NamingContainer {
public void lookupZip(AjaxBehaviorEvent event) {
// Code to lookup zipcode and get city.
// What goes HERE to update the city passed as attribute?
}
}
我缺少明显的东西吗?我已经浏览了大量BalusC的帖子,并尝试过类似的操作:
ValueExpression city = (ValueExpression) getAttributes().get("city");
city.setValue(FacesContext.getCurrentInstance().getELContext(), cityString);
我已经完成了大部分工作,但是无法通过lookupZip方法弄清楚如何在backing bean中设置city的值。城市的价值永远是 空值。这可能吗?