如何根据条件使primefaces datatable列可编辑

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何根据条件使primefaces datatable列可编辑相关的知识,希望对你有一定的参考价值。

我有一个primefaces数据表,它有一些可编辑的列。我想根据某些条件将其中一个单元格中的一个单元格设置为不可编辑,例如,如果该列是彩色的,则用户应该能够输入不同的颜色。但是如果该行包含具有特定id('*)的另一列,则用户不应该能够更新该单元。

我尝试根据inputText中的条件添加禁用,如下所示。

<p:column  headerText="Color Choice"  >               
                 <p:cellEditor>
                     <f:facet name="output"><h:outputText value="#{row.color}" /></f:facet>
                     <f:facet name="input"><p:inputText id="colorchoice" value="#{row.color}" disabled ="#{row.id.contains('*')}"/></f:facet>     
                    </p:cellEditor>             
                </p:column>

这实际上限制用户更改该特定单元格,但用户仍然可以单击并选择单元格。我希望用户无法单击并选择它以获得更好的UI体验,

答案

我想你必须使用rendered。我给你一个示例代码。您必须更改rendered代码。

          <p:column  headerText="Color Choice"  >               
             <p:cellEditor rendered="#{row.color eq 'red'}">
                 <f:facet name="output"><h:outputText value="#{row.color}" /></f:facet>
                 <f:facet name="input"><p:inputText id="colorchoice" value="#{row.color}" /></f:facet>
             </p:cellEditor>
              <h:outputText rendered="#{row.color ne 'red'}" value="#{row.color}"/>
            </p:column>

您还可以在backing bean中创建一个方法,该方法可以决定是否要呈现某些内容。你可以用rendered渲染你想要的东西。

 <p:dataTable id="cars1" var="car" value="#{somethingBean.cars1}" editable="true" style="margin-bottom:20px">
    <f:facet name="header">
        Row Editing
    </f:facet>

    <p:column headerText="Year" rendered = "#{somethingBean.renderMethod(car)}">
        <p:cellEditor >
            <f:facet name="output"><h:outputText value="#{car.year}" /></f:facet>
            <f:facet name="input"><p:inputText value="#{car.year}" style="width:100%" label="Year"/></f:facet>
        </p:cellEditor>
    </p:column>

    <p:column headerText="Year">
        <<h:outputText value="#{car.year}" />
    </p:column rendered = "#{somethingBean.renderMethod(car)}">


    <p:column style="width:35px">
        <p:rowEditor rendered = "#{somethingBean.renderMethod(car)}"/>
    </p:column>
</p:dataTable>

----- Managebean方法----

 public Boolean renderMethod(Car car) {

 if(car.color.equal("red")){
        return true;
    }else{
       return false;
    }
 }

以上是关于如何根据条件使primefaces datatable列可编辑的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式重新排序primefaces数据表中的列

如何使值的外键显示在primefaces数据表中

没有@ViewScoped的JSF

如何根据某些条件使 Jboss 崩溃

从 Managed Bean 函数调用 Primefaces 对话框

Ajv:如何根据其他属性有条件地使属性为空