javascript - PrimeFaces:使用 InputNumber 将 Excel 表格粘贴到 DataTable

标签 javascript jsf primefaces

我有一个 p:dataTable,其中包含多个月份值列,如下所示:

<p:column width="80" headerText="Januar">
    <p:inputNumber value="#{mto.month01}" symbol="€" symbolPosition="s" decimalPlaces="0"
        disabled="#{((mto.year eq indexController.currentYear) and (indexController.currentMonth gt 1)) or (mto.year lt indexController.currentYear) or (indexController.isComponentDisabled('fieldPMForecastOutflow', 'PM'))}">
        <p:ajax process="@this" partialSubmit="true"
            update=":contentform:dt-PMDetail contentform:blockButtonDeletePMYear"
            listener="#{indexController.updateWorkingCopyProjectManagementFinancesDTO}" />
    </p:inputNumber>
</p:column>

我的用户希望能够将 Excel 单元格粘贴到此数据表中。

我尝试了不同的 JavaScript 片段,例如。 G。 this并对其进行了这样的修改:

$('input').bind('paste', function (e) {
    var $start = $(this);
    var source

    //check for access to clipboard from window or event
    if (window.clipboardData !== undefined) {
        source = window.clipboardData
    } else {
        source = e.originalEvent.clipboardData;
    }
    var data = source.getData("Text");
    if (data.length > 0) {
        if (data.indexOf("\t") > -1) {
            var columns = data.split("\n");
            $.each(columns, function () {
                var values = this.split("\t");
                $.each(values, function () {
                    $start.val(this);
                    if ($start.next('input')) {
                        $start = $start.next('input');
                        $start.val(this);
                    }
                    if ($start.closest('td').next('td').find('input')) {
                        $start = $start.closest('td').next('td').find('input');
                    }
                    else
                    {
                        return false;  
                    }
                });
                $start = $start.closest('td').parent().next('tr').children('td:first').find('input');
            });
            e.preventDefault();
        }
    }
});

当我粘贴数据时,货币符号会丢失,不会进行验证(我可以粘贴字母),并且一旦我将鼠标悬停在字段上,该值就会重置为其原始值。

我正在寻找的是一种解决方案,可以“制表符”到下一个字段并像通过键盘一样输入值(例如仅数字)。如果粘贴的列太多,可以省略。 Excel 数据中的新行应导致 DataTable 中出现新行(如果我在第 1 行的第 4 列中粘贴 3x3 表格,则应填充第 1 至 3 行中的第 4 至 6 列)。

最佳答案

不要直接将值写入组件的输入字段,而是使用小部件 API 并使用其 setValue函数设置值。

来自文档:

Sets the value of this input number widget to the given value. Makes sure that the number is formatted correctly.

关于javascript - PrimeFaces:使用 InputNumber 将 Excel 表格粘贴到 DataTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75983747/

相关文章:

javascript - Highcharts制作百分比柱形图

javascript - 图像大小调整在 Chrome 中有效,但在 Firefox 中无效

java - 在 java server faces 中显示删除线数据

javascript - 语法错误: missing : after property id

javascript - 使用 RequireJS 加载 jQuery : different name convention in third-party libraries

java - 右键单击 PrimeFaces 数据表更新选择

java - NullPointer 与 Primefaces GMap OverlaySelect 事件

jsf - @ManyToMany的selectManyCheckbox中的LazyInitializationException(fetch = LAZY)

java - 单击链接时调用函数

jsf - 跨回发保留原始 GET 请求参数