我有一个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片段,例如这个,并改编成这样:
$('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中的新行(如果我将3x3表粘贴在第1行的第4列,则应填充第1至3行的第4至6列)。
不直接将值写入组件的输入字段,而是使用小部件API并使用其setValue
函数来设置值。
来自文档:
将这个输入号码小部件的值设置为给定值。确保数字格式正确。