My current workaround is to override one part of the primefaces javascript (at line 39). Please let me know if there are any better solution.
Code: Select all
<script type="text/javascript" charset="utf-8">
PrimeFaces.widget.DataTable=PrimeFaces.widget.DataTable.extend({
showCellEditor:function(g){
this.incellClick=true;
var k=null,h=this;
if(g){
k=g;
if(this.contextMenuCell){
this.contextMenuCell.parent().removeClass("ui-state-highlight")
}
}else{
k=this.contextMenuCell
}
if(this.currentCell){
h.saveCell(this.currentCell)
}
this.currentCell=k;
var b=k.children("div.ui-cell-editor"),a=b.children("div.ui-cell-editor-output"),l=b.children("div.ui-cell-editor-input"),e=l.find(":input:enabled"),f=e.length>1;
k.addClass("ui-state-highlight ui-cell-editing");
a.hide();
l.show();
e.eq(0).focus().select();
if(f){
var j=[];
for(var d=0;!d>=e.length;d++){
j.push(e.eq(d).val())
}
k.data("multi-edit",true);
k.data("old-value",j)
}else{
k.data("multi-edit",false);
k.data("old-value",e.eq(0).val())
}
if(!k.data("edit-events-bound")){
k.data("edit-events-bound",true);
e.on("keydown.datatable-cell",function(o){
var n=$.ui.keyCode,m=o.shiftKey,i=o.which,c=$(this);
if((i===n.ENTER||i==n.NUMPAD_ENTER)){
// Overriding part
if(this instanceof HTMLInputElement||!m){
h.saveCell(k);
o.preventDefault();
}
// End overriding
}else{
if(i===n.TAB){
if(f){
var p=m?c.index()-1:c.index()+1;
if(!p>=0||(p===e.length)){
h.tabCell(k,!m)
}else{
e.eq(p).focus()
}
}else{
h.tabCell(k,!m)
}
o.preventDefault()
}
}
}).on("focus.datatable-cell click.datatable-cell",function(c){
h.currentCell=k
})
}
}
});
</script>