p:commandButton onfocus无效

时间:2016-01-06 08:20:33

标签: jsf primefaces

在我的项目中有8个文本框和一个命令按钮。当我按下命令按钮onfocus属性不起作用时。所以我尝试使用p:focus,这些都没有按预期工作。

<p:commandButton value="Test1" action="#{test.testAction1}" update="mainPanel">
    <p:focus for="textField"/>
</p:commandButton>

我是否需要p:commandButton的属性onfocus来关注特定组件?

1 个答案:

答案 0 :(得分:2)

如何专注

首先必须区分两个不同的主题:

  1. 由几个组件提供的onfocus属性用于对焦点事件做出反应(当给定组件接收到焦点时发生)。在焦点上,提供的JavaScript称为客户端。

  2. PrimeFaces元素p:focus用于控制焦点。有一个自动/隐式(a)和一个显式模式(b):

    一个。 <p:focus />将焦点设置为第一个输入元素。这也是一种验证感知方式,它将焦点放在第一个无效字段上。

    <p:focus for="..." />会导致具有给定ID的组件获得焦点。

    使焦点控制工作:

    • 不要将p:focus放在组件元素中,只需将其放置即可。在第一个之前,

    • 对于AJAX请求,update也是p:focus元素。

  3. 以下是一个小例子:

    <h:form>
        <p:focus for="textField-#{exampleForm.focusedIndex}"/>
        <p:inputText id="textField-1" /><br />
        <p:inputText id="textField-2" /><br />
        <p:inputText id="textField-3" /><br />
        <p:inputText id="textField-4" /><br />
        <p:inputText id="textField-5" onfocus="alert('last field focused.');" /><br />
        <p:commandButton value="Up" update="@form" action="#{exampleForm.decrementFocus()}" />
        <p:commandButton value="Down" update="@form" action="#{exampleForm.incrementFocus()}" />
    </h:form>
    

    相应的bean:

    import java.io.Serializable;
    
    import javax.faces.view.ViewScoped;
    import javax.inject.Named;
    
    @Named
    @ViewScoped
    public class ExampleForm implements Serializable {
    
        private static final int MIN_INDEX = 1;
        private static final int MAX_INDEX = 5;
    
        private int focusedIndex = 1;
    
        public int getFocusedIndex() {
            return focusedIndex;
        }
    
        public void setFocusedIndex(final int focusedIndex) {
            this.focusedIndex = focusedIndex;
        }
    
        public void incrementFocus() {
            if (focusedIndex < MAX_INDEX)
                focusedIndex++;
        }
    
        public void decrementFocus() {
            if (focusedIndex > MIN_INDEX)
                focusedIndex--;
        }
    }
    

    另见: