在 rowEdit ajax 事件中获取 rowIndex
get rowIndex in rowEdit ajax event
我有一个可编辑的数据表(行编辑模式)。当我编辑行并单击勾号以确认新值时,我想使用 jqxvalidator 验证一些列(其中一些是必需的)。因此,单击勾号时,validateRule(#{rowIndex});
函数应验证刚刚编辑的行,但传递给此函数的 rowIndex
值是 undefined
。
有没有其他方法获取行索引并将其传递给 JavaScript 函数?
我的一些 xhtml 代码:
<p:dataTable id="tblRule" var="item" value="#{bean.ruleList}" binding="#{bean.dtRules}" editable="true"
editMode="row" rowIndexVar="rowIndex" widgetVar="tblRuleWidget">
<p:ajax event="rowEdit" listener="#{bean.doEdit}" update="tblRule" onstart="validateRule(#{rowIndex}); " />
<p:ajax event="rowEditCancel" onstart="hideValidatorMsg();" />
<p:column>
<p:rowEditor />
</p:column>
<p:column id="colRuleId" headerText="Id" >
<h:outputText value="#{item.id}" />
</p:column>
<p:column id="colRuleCode" headerText="Code">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{item.code}" />
</f:facet>
<f:facet name="input">
<p:inputText id="inRuleCode" value="#{item.code}" onblur="hideValidatorMsg(); validateRule(#{rowIndex});" />
</f:facet>
</p:cellEditor>
</p:column>
</p:dataTable>
JavaScript:
function validateRule(rowIdx) {
var namespace = 'view' + $('[id$=hidNamespace]').val();
$('#' + namespace + '\:form1').jqxValidator({
animation : 'none',
scroll : false,
arrow : false,
rules : [ {
input : '#' + namespace + '\:form1\:tabView\:tblRule\:' + rowIdx + '\:inRuleCode',
message : 'Required field!',
action : 'blur',
position : 'top',
rule : 'required'
} ]
});
if ($('#' + namespace + '\:form1').jqxValidator('validateInput', '#' + namespace + '\:form1\:tabView\:tblRule\:' + rowIdx + '\:inRuleCode') === false) {
return false;
} else {
return true;
}
}
我认为你可以采用这种方法:-
<p:dataTable binding="#{YourValue}" and so on ...>
<p:column>
<p:commandButton ... onclick="return getMyRowIndex(#{YourValue.rowIndex})" />
</p:column>
</p:dataTable>
在你以前的方法中你不会得到 rowIndex
,ajax 事件被注册一次,所以 rowIndex
不会被传递,就好像它是一个循环或每行一个按钮的 actionListener !
对于 PrimeFaces 5.2 和 <
rowIndex
作为数据存储在行中,dataTable 完全依赖于这种方法。
也就是说,根据 Widget 的源代码,这里是获取触发索引的方法:
PF('dataTableWV').getRowMeta($(event.target).closest('tr')).index
基本上 event.target
是 ✓ 图标,最接近的 tr
是行,将此行传递给 getRowMeta
函数将提取数据属性,其中之一是index
.
从 PrimeFaces 5.3 开始:
rowIndex
可以在 ajax 行为扩展的参数中找到。
ext.params[0].value
- 注意:应该在 ajax 事件的 onstart
中传递(如问题中所述)。
我有一个可编辑的数据表(行编辑模式)。当我编辑行并单击勾号以确认新值时,我想使用 jqxvalidator 验证一些列(其中一些是必需的)。因此,单击勾号时,validateRule(#{rowIndex});
函数应验证刚刚编辑的行,但传递给此函数的 rowIndex
值是 undefined
。
有没有其他方法获取行索引并将其传递给 JavaScript 函数?
我的一些 xhtml 代码:
<p:dataTable id="tblRule" var="item" value="#{bean.ruleList}" binding="#{bean.dtRules}" editable="true"
editMode="row" rowIndexVar="rowIndex" widgetVar="tblRuleWidget">
<p:ajax event="rowEdit" listener="#{bean.doEdit}" update="tblRule" onstart="validateRule(#{rowIndex}); " />
<p:ajax event="rowEditCancel" onstart="hideValidatorMsg();" />
<p:column>
<p:rowEditor />
</p:column>
<p:column id="colRuleId" headerText="Id" >
<h:outputText value="#{item.id}" />
</p:column>
<p:column id="colRuleCode" headerText="Code">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{item.code}" />
</f:facet>
<f:facet name="input">
<p:inputText id="inRuleCode" value="#{item.code}" onblur="hideValidatorMsg(); validateRule(#{rowIndex});" />
</f:facet>
</p:cellEditor>
</p:column>
</p:dataTable>
JavaScript:
function validateRule(rowIdx) {
var namespace = 'view' + $('[id$=hidNamespace]').val();
$('#' + namespace + '\:form1').jqxValidator({
animation : 'none',
scroll : false,
arrow : false,
rules : [ {
input : '#' + namespace + '\:form1\:tabView\:tblRule\:' + rowIdx + '\:inRuleCode',
message : 'Required field!',
action : 'blur',
position : 'top',
rule : 'required'
} ]
});
if ($('#' + namespace + '\:form1').jqxValidator('validateInput', '#' + namespace + '\:form1\:tabView\:tblRule\:' + rowIdx + '\:inRuleCode') === false) {
return false;
} else {
return true;
}
}
我认为你可以采用这种方法:-
<p:dataTable binding="#{YourValue}" and so on ...>
<p:column>
<p:commandButton ... onclick="return getMyRowIndex(#{YourValue.rowIndex})" />
</p:column>
</p:dataTable>
在你以前的方法中你不会得到 rowIndex
,ajax 事件被注册一次,所以 rowIndex
不会被传递,就好像它是一个循环或每行一个按钮的 actionListener !
对于 PrimeFaces 5.2 和 <
rowIndex
作为数据存储在行中,dataTable 完全依赖于这种方法。
也就是说,根据 Widget 的源代码,这里是获取触发索引的方法:
PF('dataTableWV').getRowMeta($(event.target).closest('tr')).index
基本上 event.target
是 ✓ 图标,最接近的 tr
是行,将此行传递给 getRowMeta
函数将提取数据属性,其中之一是index
.
从 PrimeFaces 5.3 开始:
rowIndex
可以在 ajax 行为扩展的参数中找到。
ext.params[0].value
- 注意:应该在 ajax 事件的 onstart
中传递(如问题中所述)。