Jsf 使用带有RequestContex Execute的WidgetVar为Bean中的Primefaces组件设置焦点
在使用Primefaces RequestContex调用其他组件的函数后,是否有方法设置组件焦点 我试过:Jsf 使用带有RequestContex Execute的WidgetVar为Bean中的Primefaces组件设置焦点,jsf,jsf-2,primefaces,focus,Jsf,Jsf 2,Primefaces,Focus,在使用Primefaces RequestContex调用其他组件的函数后,是否有方法设置组件焦点 我试过: RequestContex.getCurrentInstance().execute("PF('WidgetVar').focus();"); 及 我没有出错,但什么也没发生 我错过了什么,还是这不可能 我使用Primefaces 4.0.3和MyFaces 2.0.2 编辑示例代码 豆子 XHTML 看起来您在这里有一些误解: 您可以在RequestContextAPI中执行Java
RequestContex.getCurrentInstance().execute("PF('WidgetVar').focus();");
及
我没有出错,但什么也没发生
我错过了什么,还是这不可能
我使用Primefaces 4.0.3和MyFaces 2.0.2
编辑示例代码
豆子
XHTML
看起来您在这里有一些误解:
RequestContext
API中执行Java代码
RequestContext.getCurrentInstance().execute("(((InputText) event.getComponent()).getWidgetVar()).Focus();");
你不能。上面的代码不起作用<代码>执行仅为JavaScript构建focus()
。JS区分大小写。因此,聚焦焦点
。所以我认为你应该有
RequestContext.getCurrentInstance().execute("yourClientSideId.focus();");
其中,yourClientSideId
应该对应于您感兴趣的组件的widgetVar
属性。我不确定您在代码中引用的PF
对象应该是什么。我从来没见过。也许你指的是PrimeFaces
对象RequestContext
上使用scrollTo
方法:
RequestContext.getCurrentInstance().scrollTo("yourComponentWidgetVar");
如果前面的答案不起作用,您可以创建一个js函数,例如:
function focusField(id){
$(id).focus();
}
然后在bean中,假设您希望将焦点设置在字段“input4”上,它表示ID而不是Widgetvar
RequestContext.getCurrentInstance().execute("focusField('#input4');");
您可以使用primefaces中的
标记,我使用它在运行时设置焦点,如下所示:
.xhtml代码:
.java代码:
focusProperty=“componentIDToSetFocus”;
不要忘记使用PrimeFaces 6.1更新
标记的ID,由于未知原因,我无法使PrimeFaces p:focus正常工作。所以,我刚刚实现了一个onload JQuery函数,将焦点设置为p:commandButton。对于onload调用,将jQuery嵌套函数放在下面的“body”中。这是为了确保覆盖任何其他primefaces onload函数
<script>
jQuery(document).ready(function () {
jQuery(document).ready(function () {
// twice in document.ready to
// execute after Primefaces callbacks
PF('widget_home_page_form_command_button').getJQ().focus();
});
});
</script>
jQuery(文档).ready(函数(){
jQuery(文档).ready(函数(){
//文档中有两次。准备好了吗
//在Primefaces回调后执行
PF('widget_home_page_form_command_button').getJQ().focus();
});
});
PrimeFaces为所有PrimeFaces组件创建widgetVar组件。有些功能通过widgetVar可用,例如禁用或启用。但是,我必须使用getJQ()函数来获取jQuery对象,并使用该对象在命令按钮上设置焦点 我不确定PF是否代表Primefaces对象,但从4.0开始,他们使用了一种新的语法来访问widgetVars。我是从primefaces页面上的对话示例中得到的,所以我认为尝试一下不会有什么坏处。不幸的是,代码对我不起作用。我尝试了widget和id.@Shibas-你也不能使用
scrollTo
?我添加了我的代码。我想通过一个按钮或bean内部的其他事件在输入框之间切换焦点。scrollTo无法正常工作。RequestContext.getCurrentInstance().scrollTo(“widgetVarName”);不工作,屏幕挂起tryRequestContext.getCurrentInstance().execute($('#input4').focus();)代码>@jerith2:这个评论与已经给出的答案有什么根本性的不同?你编辑的那个?如果你认为这个答案是最好的,请投赞成票one@Kukeltje,初学者可能会认为,需要创建javascript函数来解决焦点问题,因此为了明确这不是必需的,我在注释中给出了解决方案。编辑答案的原因是#解决方案中未提供标记,因此人们最终会使用ID和Widgetvar进行试错,希望这是清楚的@杰里思2:那就把它作为对答案的评论,而不是问题。您甚至可以改进答案并添加功能。您也可以不使用任何功能来完成。如果您遇到无法使p:focus
正常工作的问题,您可以始终尝试创建自己的问题(并自己回答),而不是提供与您尝试回答的问题仅略微相关的答案。对我来说,p:focus
在6.1中以我使用它的方式工作,因此它肯定不是一个通用问题。
function focusField(id){
$(id).focus();
}
RequestContext.getCurrentInstance().execute("focusField('#input4');");
<script>
jQuery(document).ready(function () {
jQuery(document).ready(function () {
// twice in document.ready to
// execute after Primefaces callbacks
PF('widget_home_page_form_command_button').getJQ().focus();
});
});
</script>