我正在使用richfaces 4,我正在使用嵌套的rich:datatable。我的对象模型非常简单。我的形状有多个坐标(x和y)。
<rich:dataTable id="shapeTable" value="#{shapeListBean.shapes}" var="shape">
<rich:column>
<f:facet name="header">Id</f:facet>
#{shape.shapeId}
</rich:column>
<rich:column>
<f:facet name="header">Shape</f:facet>
<rich:dataTable value="#{shape.blockCoordinates}" var="coord">
<rich:column>
<h:outputLabel value="x" for="coordXId"/>
<h:inputText id="coordXId" value="#{coord.x}" />
</rich:column>
<rich:column>
<h:outputLabel value="y" for="coordYId"/>
<h:inputText id="coordYId" value="#{coord.y}" />
</rich:column>
<rich:column>
<a4j:commandButton value="#{bundle.remove}" action="#{shapeListBean.removeCoord(shape, coord)}" render="shapeTable messages"/>
</rich:column>
</rich:dataTable>
<h:commandButton value="#{bundle.save}" action="#{shapeListBean.update(shape)}" render="shapeTable messages"/>
</rich:column>
</rich:dataTable>
Backing Bean(viewscped):
@ManagedBean
@ViewScoped
public class ShapeListBean implements Serializable {
public ShapeListBean() {}
@PostConstruct
public void init(){
log.debug("Init ShapeListBean ...");
shapes = shapeService.listShapes();
log.debug("Shape Count: " + shapes.size());
// Adding a starting coordinate
coords.add(new Coordinate());
}
public void removeCoord(Shape shape, Coordinate coord){
log.debug("Removing coordinate from shape: " + shape.getShapeId() + " " + coord);
shape.getInitBlockCoord().remove(coord);
}
public void update(Shape shape){
try{
log.debug("Update shape: " + shape.getShapeId());
shapeService.updateShape(shape.getShapeId(), shape.getInitBlockCoord());
}catch(Exception ex){
Core.setFacesMessage(ex, userBean.getLanguage(), HqException.INTERNAL_ERROR);
}
}
形状:
public class Shape implements Serializable{
private static final long serialVersionUID = -2230775000488531609L;
@Id
private String shapeId = java.util.UUID.randomUUID().toString();
@ElementCollection(fetch=FetchType.EAGER)
private Set<Coordinate> initBlockCoord = new HashSet<Coordinate>();
坐标:
@Embeddable
public class Coordinate implements Serializable, ICoordinate{
private static final long serialVersionUID = -5866341829302555966L;
@Column(nullable=true)
protected int x;
@Column(nullable=true)
protected int y;
shapeListBean.remove(...)工作正常,并从我的Shape中删除选定的坐标。
当我想从一个形状编辑一个坐标并点击安全时,我只能编辑最后一个形状。因此,编辑列表中最后一个形状的坐标会起作用,但对于所有其他形状都不起作用。
当我想让Coordinates可编辑时,是否有可能像我在这里构建或嵌套dataTables这样的问题?
最好的问候, 米
更新: 当我从rich:dataTable更改为h:dataTable时,它可以工作。也许富有的一个错误:dataTable?
更新2: 似乎它是Richfaces 4.0.0.Final中的一个错误。更新到4.1.0.Final时它可以工作。