填充列表,这是每个JavaScript的JSF复合接口的属性



我有一个现有的JSF复合组件,它现在应该获得一个新属性。这个新属性应该是一个列表,其中填充了用户在浏览器中选择的每个鼠标的x/y坐标。

<composite:interface componentType="myComponent">
    ...
    <composite:attribute name="selectedPositions" type="java.util.ArrayList" />
</composite:interface>
<composite:implementation>
    //TODO: fill selectedPositions with values 
</composite:implementation>

使用此组件的开发人员应该在其支持bean中提供预填充列表或空列表:

<myns:mycomponent id="myComponent" selectedPositions="#{backingBean.prefilledList}" ... />

如果列表是预填充的,那么我将呈现这些值。但是用户应该能够通过每次拖放来改变浏览器中呈现的值。当他/她提交表单时,更新的或新的值应该驻留在列表selectedPositions中。

目前我不知道如何从我的JavaScript代码到列表的值?

同时我也找到了答案。在组件实现的decode()中,我可以访问作为属性传入的列表:

@Override
public void decode(FacesContext facesContext) {
    ...
    ELContext elContext = facesContext.getELContext();
    ExpressionFactory expressionFactory = facesContext.getApplication().getExpressionFactory();
    ValueExpression valueExpLandmarks = expressionFactory.createValueExpression(elContext, "#{cc.attrs.selectedPositions}", List.class);
    Object value = valueExpLandmarks.getValue(elContext);
    if (value instanceof List) {
        this.selectedPositions = (List) value;
    }
    ...
}

当我使用另一个隐藏输入字段提交新的位置时,然后我可以在组件实现中使用从隐藏输入字段获得的值填充列表。

最新更新