繁体   English   中英

Primefaces 数据表单元格编辑下拉问题

[英]Primefaces datatable cell edit dropdown problems

我有 Primefaces <p:datatable>启用了 cellEdit 模式,这意味着当单击单元格时,它会更改为编辑模式,当您单击其他地方(onblur)时,单元格返回到 output 模式并调用 cellEdit ajax 事件(如果更改)。
在数据表可编辑单元格中,我将<p:selectOneMenu><p:autoComplete>与下拉菜单一起使用。 Primefaces 在单元格容器外生成 HTML 下拉菜单代码,所以每次我从下拉菜单中输入 select 内容时,单元格都会保存值并退出编辑模式,我需要它保持编辑模式。
我知道这适用于<h:selectOneMenu> ,但使用其他元素不是我的选择。
有没有办法让单元格编辑忽略下拉菜单的点击?
还是有一种方法可以防止在打开下拉菜单时触发 onblur 事件?

在我的例子中,数据表的列是动态的。
我用:
Primefaces 5.3
PrimeFaces 扩展 4.0.0
莫哈拉 2.2.9
野蝇 8

这个问题的一个基本例子:

xhtml:

<h:form id="form">
<p:dataTable id="cars" var="car" value="#{dtEditView.cars}" editable="true" editMode="cell" widgetVar="cellCars">

    <p:ajax event="cellEdit"  />

    <p:column headerText="Car">
        <p:cellEditor>
            <f:facet name="output"><h:outputText value="#{car.title}" /></f:facet>
            <f:facet name="input"><p:inputText value="#{car.title}" style="width:100%" label="Car"/></f:facet>
        </p:cellEditor>
    </p:column>

    <p:column headerText="Color">
        <p:cellEditor>
            <f:facet name="output"><h:outputText value="#{car.color}" /></f:facet>
            <f:facet name="input">
                <p:selectOneMenu value="#{car.color}"  style="width:100%">
                    <f:selectItem itemLabel="Red" itemValue="Red" />
                    <f:selectItem itemLabel="Blue" itemValue="Blue" />
                    <f:selectItem itemLabel="Green" itemValue="Green" />
                </p:selectOneMenu>
            </f:facet>
        </p:cellEditor>
    </p:column>

</p:dataTable>
</h:form>

支持豆:

@ViewScoped
@Named("dtEditView")
public class TestController implements Serializable {
   List<Car> cars=new ArrayList<Car>();

    @PostConstruct
    public void init(){
        cars.add(new Car("BMW","Red"));
        cars.add(new Car("Alfa Romeo","Green"));
    }

    public List<Car> getCars() {
        return cars;
    }

    public void setCars(List<Car> cars) {
        this.cars = cars;
    }
}

汽车object:

public class Car {
    String title;
    String color;

    Car(String title, String color){
        this.title=title;
        this.color=color;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}

我不确定这是否直接相关,但在 Primereact 中,对于同一个 DataTable 组件,如果单元格编辑和下拉列表一起使用,当您单击下拉列表和 select 列表中的值时,您会得到相同的行为,它被解释为单击单元格外部,编辑模式结束而不保存值。

这可以通过向下拉列表添加appendTo='self'来纠正,使列表显示为附加到下拉列表和单元格,这意味着点击不被归类为单元格外部。 在下拉列表中设置此值会导致单元格保持编辑模式的预期行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM