2016-01-06 52 views
1

在我的项目中有8个文本框和一个命令按钮。当我按下命令按钮onfocus属性不起作用。所以我试图使用p:focus或者没有按预期工作。p:commandButton onfocus不起作用

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

我需要p:commandButton的属性onfocus聚焦于特定的组成部分?

回答

2

如何获得集中所有两种不同学科的

首先必须在这里区分:

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

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

    a。​​将焦点设置为第一个输入元素。这也是验证意识的方式,它将焦点放在第一个无效字段上。

    b。 <p:focus for="..." />使具有给定ID的组件接收焦点。

    镜头聚焦控制工作:

    • 不要把p:focus的构成要素中,只要把它例如在第一个之前,

    • 用于AJAX请求,update还有p:focus元素。

又来了一个小例子来摆弄:

<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--; 
    } 
} 

参见:

+0

当我使用onfocus =“指定Id”时,它会在浏览器中显示未定义的错误 – Karthik

+1

是的,因为'onfocus'属性需要JavaScript。 –

+0

@Karthik:有没有进展? –

相关问题