我有一个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体验,
答案 0 :(得分:2)
我认为您必须使用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;
}
}