2

我想使用 onblur 功能处理 inputSecret 的值,但我得到错误Couldn't invoke method getOnblur

<b:column span="3">
     <p:outputLabel value="#{msg.confirmPassword}" />
     <b:inputSecret value="#{workerDetail.confirmPassword}" onblur="#{workerDetail.checkPassword}"/>
</b:column>

这是支持 bean 上的方法:

public void checkPassword(AjaxBehaviorEvent event)
{
    System.out.println(confirmPassword);
}

我该如何解决?

4

1 回答 1

1

BootsFaces 对 AJAX 采用的方法与其他 JSF 框架略有不同。这个想法是简单地使用 JavaScript 回调函数来调用 Java 后端 bean 中的方法。但是,我们还希望保持与其他 JSF 框架的兼容性,因此我们无法采用您的方法,尽管它可能很诱人。相反,我们决定在 AJAX 调用之前加上一个ajax:前缀。它后面是一个 EL 表达式,它也定义了参数列表。换句话说:除了标准的 JSF,BootsFaces 不传递事件参数。

TL;DR:只需像这样更改您的onblur属性:

<b:column span="3">
     <p:outputLabel value="#{msg.confirmPassword}" />
     <b:inputSecret value="#{workerDetail.confirmPassword}" onblur="ajax:workerDetail.checkPassword()"/>
</b:column>

请注意后面的括号checkPassword。这是一个 EL 表达式,当事件被触发并发送到 Java 后端时执行。

生成的支持 bean 方法不需要 event 参数:

public void checkPassword()
{
    System.out.println(confirmPassword);
}

您的方法的不同之处在于您的 EL 表达式是在呈现页面时评估的 - 这有点早。

于 2016-08-10T20:41:48.460 回答