下午好,
使用JSF + Primefaces。 我有一个带有inputText字段的dataTable,它执行一个listner,当你结束函数或按Tab键时,焦点就是输入同一组件的低行。
用Google搜索了一些东西,似乎要用JavaScript或jQuery完成,但我知之甚少。组件的clientId似乎有一些形式:dataTable:0:input,以及操作焦点的数字“0”。 任何人都知道如何在dataTable中处理组件的重点?
谢谢。
答案 0 :(得分:2)
为您的组件添加适当的动态ID,然后您可以非常轻松地识别您的元素。
请考虑以下代码段:
<ice:form id="form1"/>
<ice:dataTable id="dataTable1">
...
<ice:inputText id="inputText1" />
<ice:commandButton id="commandButton1" value="Set Focus" onclick="javascript: setFocusOfInput(this);" />
...
</ice:dataTable>
</ice:form>
和javascript部分:
function setFocusOfInput(obj){
var objectId = obj.id;
var requiredIndex = objectId.indexOf(':commandButton1');
var formId = objectId.substring(0, requiredIndex);
alert(formId); /* You will get your form id here, no-matter if you don't set. */
/* Now you can get your required element and do-whatever you want. */
var inputText1 = document.getElementById(formId +':inputText1');
inputText1.focus();
}
只需为元素添加适当的ID即可将其与其他元素区分开来。
答案 1 :(得分:2)
您可以使用PrimeFaces元素<p:focus />
,并在“context”属性中输入dataTable的ID。 “context”属性用于设置根组件以启动第一个输入搜索,因此如果您使用AJAX,则可以更新包含“dataTable”和“focus”元素的容器,以及dataTable中的第一个输入将在AJAX召集之后收到焦点:
<p:focus context="dataTable" />
如果要直接引用输入,也可以使用“for”属性:
<p:focus for="inputText" />
查看PrimeFaces文档:p:focus。