Use ValueExpression#setValue() http://download.oracle.com/javaee/6/api/javax/el/ValueExpression.html#setValue%28javax.el.ELContext,%20java.lang.Object%29.
FacesContext facesContext = FacesContext.getCurrentInstance();
ELContext elContext = facesContext.getELContext();
ValueExpression valueExpression = facesContext.getApplication().getExpressionFactory()
.createValueExpression(elContext, "#{cc.attrs.model.location}", Location.class);
valueExpression.setValue(elContext, newLocation);
The Application#evaluateExpressionGet() http://download.oracle.com/javaee/6/api/javax/faces/application/Application.html#evaluateExpressionGet%28javax.faces.context.FacesContext,%20java.lang.String,%20java.lang.Class%29顺便说一句ValueExpression#getValue() http://download.oracle.com/javaee/6/api/javax/el/ValueExpression.html#getValue%28javax.el.ELContext%29在幕后,正如其所描述的那样javadoc http://download.oracle.com/javaee/6/api/javax/faces/application/Application.html#evaluateExpressionGet%28javax.faces.context.FacesContext,%20java.lang.String,%20java.lang.Class%29(如果你读过它......)
无关针对具体问题,您是否意识到创建支持的可能性UIComponent
复合组件的类?我敢打赌这比摆弄要容易得多ValueExpression
是这样的。然后你就可以使用继承的getAttributes()
方法得到model
.
Model model = (Model) getAttributes().get("model);
// ...
您可以在我们的中找到示例复合组件 wiki 页面 https://stackoverflow.com/tags/composite-component/info.