OmniFaces高亮显示不会使用<p:ajax> </p:ajax>设置焦点

时间:2015-04-22 08:09:01

标签: jsf-2 primefaces omnifaces

我有一个简单的登录表单。我使用<p:ajax>来调用<p:blockUI>(请参阅this问题)。

<h:commandButton id="anmeldung_button"
action="#{benutzerAnmeldung.anmelden}" value="Anmelden"
styleClass="btn btn-info btn-sm">
    <p:ajax process="@form" update="@form"/>
</h:commandButton>
<p:blockUI id="block" block=":anmeldung" trigger="anmeldung_button" />

我正在使用<o:highlight />突出显示无效输入。这很好用。 它也完美地与<f:ajax>合作。

显然,它不适用于<p:ajax>

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

这是由<p:ajax>尝试通过doEval() 执行不完整脚本后重新调整活动元素所引起的(如handleReFocus() function in core.ajax.js script中所示)。但是,当您通过单击命令按钮而不是在输入内部按 Enter 提交表单时,该活动元素将成为命令按钮本身,而不是输入文本。您可以通过使用输入键提交表格。您将看到焦点正确完成。

在您的特定情况下,有两种方法可以解决此问题:

  1. 利用PrimeFaces&#39;通过<p:focus>拥有自动对焦功能,该功能位于表单内,如下所示:

    <h:form id="anmeldung">
        <p:focus context="anmeldung" />
        ...
    </h:form>
    

    它还会自动考虑无效的输入字段。

  2. 在JavaScript中将PrimeFaces.customFocus设置为true,以便handleReFocus()函数无法完成其工作。

    <script>PrimeFaces.customFocus = true;</script>