PrimeFaces数据表中的条件单元格编辑

我想仅在满足某些条件的情况下允许用户编辑数据表中的单元格。

最初,我尝试<choose>实现以下目标:

<p:dataTable var="item" value="${bean.items}" editable="true" editMode="cell">
    <p:column headerText="column A">
        <c:choose>
            <c:when test="${item.isEditable}">
                <p:cellEditor id="title">
                    <f:facet name="output">
                        <h:outputText value="#{item.title}"/>
                    </f:facet>
                    <f:facet name="input">
                        <p:inputText value="#{item.title}"/>
                    </f:facet>
                </p:cellEditor>
            </c:when>
            <c:otherwise>
                <h:outputText value="#{item.title}"/>
            </c:otherwise>
        </c:choose>
    </p:column>
...

但它不起作用。另一种方法是使用rendered属性:

<p:column headerText="column A">
    <p:cellEditor rendered="${item.isEditable}">
         <f:facet name="output">
             <h:outputText value="#{item.title}"/>
         </f:facet>
         <f:facet name="input">
             <p:inputText value="#{item.title}"/>
         </f:facet>
     </p:cellEditor>
    <h:outputText value="#{item.title}" rendered="#{!item.isEditable}"/>
</p:column>

效果很好-用户只能编辑允许的单元格。

但是,即使单元格不可编辑,它仍然具有ui-cell-editing类,并且对于用户而言就像可编辑单元格。

将条件应用于单元格编辑的正确方法是什么?

谢谢!

BalusC

要正确学习JSTL失败的课程,它失败的原因如下所述:JSF2 Facelets中的JSTL ...有意义吗?简而言之:#{item}JSTL运行时不可用。

回到一个具体的问题:由于样式的组合editMode="cell"组件中的物理存在因此插入了样式类PrimeFaces数据表渲染器根本不考虑是否渲染了。它只是直接插入样式类,然后通过JS / jQuery触发样式。您正在为解决方案寻找正确的方向,JSTL可以有条件地在JSF组件树中物理地添加/删除JSF组件,但是不幸的是,它无法在此构造中使用。<p:cellEditor><p:column><p:cellEditor>ui-editable-columnui-cell-editing

最好的选择是将问题报告发布给PrimeFaces员工,据此,您不仅要考虑<p:cellEditor>组件的物理存在,而且要考虑isRendered()结果。考虑到PrimeFaces 3.5版,它将位于该类的第796行中,DataTableRenderer其最初看起来像这样(为便于阅读而引入了换行符):

String styleClass = selectionEnabled 
    ? DataTable.SELECTION_COLUMN_CLASS 
    : (column.getCellEditor() != null) 
        ? DataTable.EDITABLE_COLUMN_CLASS 
        : null;

并应作如下修改:

String styleClass = selectionEnabled 
    ? DataTable.SELECTION_COLUMN_CLASS 
    : (column.getCellEditor() != null && column.getCellEditor().isRendered()) 
        ? DataTable.EDITABLE_COLUMN_CLASS 
        : null;

如果您迫不及待,则可以同时自定义自定义渲染器。

package com.example;

import org.primefaces.component.datatable.DataTableRenderer;

public class MyDataTableRenderer extends DataTableRenderer {

    @Override
    protected void encodeCell(FacesContext context, DataTable table, UIColumn column, String clientId, boolean selected) throws IOException {
        // Copypaste here the original encodeCell() source code and make modifications where necessary.
    }

}

然后,要使其运行,请在中进行如下注册faces-config.xml

<render-kit>
    <renderer>
        <description>Overrides the PrimeFaces table renderer with customized cell renderer.</description>
        <component-family>org.primefaces.component</component-family>
        <renderer-type>org.primefaces.component.DataTableRenderer</renderer-type>
        <renderer-class>com.example.MyDataTableRenderer</renderer-class>
    </renderer>
</render-kit>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

primefaces数据表rowedit不更新单元格元素

来自分类Dev

使用AngularJS的数据表中的单元格按钮

来自分类Dev

如何使数据表行或单元格可点击?

来自分类Dev

如何更新PrimeFaces数据表上的特定单元格

来自分类Dev

数据表-使首标单元格包装单词

来自分类Dev

数据表单元格laravel 5.2内部的表

来自分类Dev

截断数据表中的单元格,但也可以在工具提示中预览全文

来自分类Dev

数据表,获取隐藏单元格的值

来自分类Dev

闪亮地编辑数据表中的多个单元格

来自分类Dev

编辑数据表(R)中单元格的RGB颜色

来自分类Dev

R Shiny中的数据表:借助JavaScript通过KeyTable扩展从数据表中读取标记的单元格

来自分类Dev

如何在react.js中的mdb数据表中重置单元格的宽度

来自分类Dev

从数据表中删除空白单元格

来自分类Dev

PrimeFaces数据表中的条件单元格编辑

来自分类Dev

Primefaces数据表单元格编辑新值和旧值

来自分类Dev

使用AngularJS的数据表中的单元格按钮

来自分类Dev

编辑数据表单元格

来自分类Dev

如何更新PrimeFaces数据表上的特定单元格

来自分类Dev

数据表...如何根据表的单元格值更改单元格的颜色

来自分类Dev

数据表单元格laravel 5.2内部的表

来自分类Dev

数据表,获取隐藏单元格的值

来自分类Dev

如何更改数据表的单元格颜色?

来自分类Dev

单元格编辑后如何更新primefaces数据表行?

来自分类Dev

如何使用数据表更新所有表中的所有单元格

来自分类Dev

获取选定的单元格元素数据表

来自分类Dev

用外部数据表覆盖单元格

来自分类Dev

根据内容更改单元格 CSS 数据表

来自分类Dev

如何合并primefaces数据表行中的单元格?

来自分类Dev

如何根据数据表中的另一个单元格值隐藏单元格值

Related 相关文章

  1. 1

    primefaces数据表rowedit不更新单元格元素

  2. 2

    使用AngularJS的数据表中的单元格按钮

  3. 3

    如何使数据表行或单元格可点击?

  4. 4

    如何更新PrimeFaces数据表上的特定单元格

  5. 5

    数据表-使首标单元格包装单词

  6. 6

    数据表单元格laravel 5.2内部的表

  7. 7

    截断数据表中的单元格,但也可以在工具提示中预览全文

  8. 8

    数据表,获取隐藏单元格的值

  9. 9

    闪亮地编辑数据表中的多个单元格

  10. 10

    编辑数据表(R)中单元格的RGB颜色

  11. 11

    R Shiny中的数据表:借助JavaScript通过KeyTable扩展从数据表中读取标记的单元格

  12. 12

    如何在react.js中的mdb数据表中重置单元格的宽度

  13. 13

    从数据表中删除空白单元格

  14. 14

    PrimeFaces数据表中的条件单元格编辑

  15. 15

    Primefaces数据表单元格编辑新值和旧值

  16. 16

    使用AngularJS的数据表中的单元格按钮

  17. 17

    编辑数据表单元格

  18. 18

    如何更新PrimeFaces数据表上的特定单元格

  19. 19

    数据表...如何根据表的单元格值更改单元格的颜色

  20. 20

    数据表单元格laravel 5.2内部的表

  21. 21

    数据表,获取隐藏单元格的值

  22. 22

    如何更改数据表的单元格颜色?

  23. 23

    单元格编辑后如何更新primefaces数据表行?

  24. 24

    如何使用数据表更新所有表中的所有单元格

  25. 25

    获取选定的单元格元素数据表

  26. 26

    用外部数据表覆盖单元格

  27. 27

    根据内容更改单元格 CSS 数据表

  28. 28

    如何合并primefaces数据表行中的单元格?

  29. 29

    如何根据数据表中的另一个单元格值隐藏单元格值

热门标签

归档