如何禁用Primefaces的整个dataTable组件?
解决方案:禁用PrimeFaces DataTable(含自定义输入组件)
首先得明确:PrimeFaces 3.5的<p:dataTable>的editable属性只对PrimeFaces自带的可编辑组件(比如<p:cellEditor>、<p:inputText>)生效,你用的是自定义的<input:decimalField>,所以这个属性自然不起作用。下面给你两种可行的方案:
一、PrimeFaces/JSF原生方案(推荐)
既然你已经通过#{conversionRatesBean.readOnlyUser}判断只读状态,直接把这个状态绑定到自定义输入组件的禁用属性上,同时给表格添加只读样式即可:
禁用自定义输入框
修改你的<input:decimalField>,添加disabled="#{conversionRatesBean.readOnlyUser}"属性,从功能上锁住输入:<input:decimalField beanValue="#{conversionRatesBean.conversionMap[row][column].conversionValue}" errorMsg="#{msgs['errorInvalidValue']}" rendered="#{rowIdx != colIdx}" decimalFields="4" errorDecimal="#{msgs['packaging.error.number.decimals']}" styleClass="textAlignRight " maxLength="9" disabled="#{conversionRatesBean.readOnlyUser}" />添加只读视觉提示
给<p:dataTable>的styleClass加上条件判断,只读时添加灰化样式:<p:dataTable editable="#{!conversionRatesBean.readOnlyUser}" id="conversionRateTable" var="row" value="#{conversionRatesBean.rowNames}" rowIndexVar="rowIdx" styleClass="projectTable table-container #{conversionRatesBean.readOnlyUser ? 'read-only-table' : ''}">再在CSS里定义这个样式类,阻止鼠标交互并降低透明度:
.read-only-table { opacity: 0.7; pointer-events: none; /* 禁止所有鼠标点击、选中操作 */ }
二、jQuery fallback方案
如果原生方案因组件限制无法生效,用jQuery强制控制表格内的输入元素:
在页面底部添加这段脚本(确保在PrimeFaces资源加载完成后执行):
$(document).ready(function() { // 读取后端传递的只读状态 var isReadOnly = #{conversionRatesBean.readOnlyUser}; if (isReadOnly) { // 禁用表格内所有输入控件 $('#conversionRateTable input').prop('disabled', true); // 给表格添加只读样式 $('#conversionRateTable').addClass('read-only-table'); } });
同样需要配合上面的read-only-table CSS类,保证功能和视觉体验一致。
内容的提问来源于stack exchange,提问作者mindfreak
相关产品推荐
相关产品推荐

