首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用WidgetVar设置Bean中Primefaces组件的焦点并执行RequestContex

用WidgetVar设置Bean中Primefaces组件的焦点并执行RequestContex
EN

Stack Overflow用户
提问于 2013-12-13 05:23:45
回答 3查看 24.8K关注 0票数 0

是否有一种方法可以在调用带有Primefaces RequestContex的其他组件之后设置组件焦点?

我试过:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RequestContex.getCurrentInstance().execute("PF('WidgetVar').focus();");

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RequestContex.getCurrentInstance().execute("(((InputText) event.getComponent()).getWidgetVar()).focus();");

我没有错误,但什么也没有发生。

我错过了什么吗?这不可能吗?

我使用Primefaces 4.0.3和MyFaces 2.0.2

编辑示例代码

豆子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.io.Serializable;
import java.util.logging.Logger;

import javax.annotation.PostConstruct;

import org.primefaces.context.RequestContext;

public class NavigationBean implements Serializable {

    private static final long serialVersionUID = 1L;
    private String input;

    public NavigationBean() {}

    @PostConstruct
    public void init() {

    }

    public void goNext() {
        Logger.getAnonymousLogger().warning("GONEXT");
        RequestContext.getCurrentInstance().scrollTo("w3");

    }

    public String getInput() {
        return input;
    }

    public void setInput(String input) {
        this.input = input;
    }

}

XHTML

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">
<h:head>


</h:head>

<h:body >

<h:form id="form">
<h:inputText id="input1" value="#{navigationBean.input}" widgetVar="w1"></h:inputText>
<h:inputText id="input2" value="#{navigationBean.input}" widgetVar="w2"></h:inputText>
<h:inputText id="input3" value="#{navigationBean.input}" widgetVar="w3"></h:inputText>
<h:inputText id="input4" value="#{navigationBean.input}" widgetVar="w4"></h:inputText>
    <p:commandButton value="focus" action="#{navigationBean.goNext()}" />

</h:form>


</h:body>

</html>
EN

回答 3

Stack Overflow用户

发布于 2015-03-25 05:45:38

如果前面的答案不起作用,您可以创建一个js函数,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function focusField(id){
 $(id).focus();
}

然后在您的bean中,假设您希望将焦点设置在字段"input4“上,它表示ID而不是Widgetvar

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RequestContext.getCurrentInstance().execute("focusField('#input4');");
票数 3
EN

Stack Overflow用户

发布于 2017-12-11 07:56:27

使用PrimeFaces 6.1时,由于未知的原因,我无法使primefaces :focus工作。因此,我刚刚实现了一个onload JQuery函数来将焦点设置为p:commandButton。对于onload调用,将jQuery嵌套函数放在'body‘下面。这将确保覆盖任何其他primefaces函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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>

PrimeFaces为所有primefaces组件创建widgetVar组件。有些特性可以通过widgetVar获得,例如禁用或启用。但是,我不得不使用getJQ()函数来获取jQuery对象,并使用该对象在命令按钮上设置焦点。

票数 3
EN

Stack Overflow用户

发布于 2013-12-15 10:10:37

看上去你在这里有几个误解:

  1. 您可以在Java中执行RequestContext代码。 RequestContext.getCurrentInstance().execute("(((InputText) event.getComponent()).getWidgetVar()).Focus();"); 你不能。上面的代码不起作用。execute只为JavaScript构建。
  2. 您要查找的函数名是focus()。JS是区分大小写的。所以Focus <> focus。所以我觉得你应该拥有的 RequestContext.getCurrentInstance().execute("yourClientSideId.focus();"); 其中yourClientSideId应该对应于您感兴趣的组件的widgetVar属性。我不知道您在代码中引用的PF对象应该是什么。我从没见过。也许你指的是PrimeFaces对象?

在发生上述故障时,可以始终在scrollTo上使用RequestContext方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RequestContext.getCurrentInstance().scrollTo("yourComponentWidgetVar");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20567620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文