根据 JavaScript 填充作为 JSF 复合接口属性的列表
Populate list that is an attribute of a JSF composite interface per JavaScript
我有一个现有的 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}" ... />
如果列表已预先填充,那么我将呈现这些值。但是用户应该能够通过拖放来更改浏览器中的呈现值。当 he/she 提交表单时,更新值或新值应位于列表 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;
}
...
}
当我使用另一个隐藏输入字段提交新头寸时,我可以在组件实现中使用从隐藏输入字段获得的值填充列表。
我有一个现有的 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}" ... />
如果列表已预先填充,那么我将呈现这些值。但是用户应该能够通过拖放来更改浏览器中的呈现值。当 he/she 提交表单时,更新值或新值应位于列表 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;
}
...
}
当我使用另一个隐藏输入字段提交新头寸时,我可以在组件实现中使用从隐藏输入字段获得的值填充列表。