试图通过onevent =“#{checkIfUsernameAvailable}”调用ajax监听器方法

时间:2015-04-27 17:37:32

标签: ajax jsf jsf-2

我有一个jsf页面和一个输入字段。当此输入字段的事件模糊时,我希望调用我的ManagedBean的方法checkIfUsernameAvailable()。然后应该渲染图像。问题是,无论我做什么,该方法要么永远不会被调用,要么就是找不到。那么有人能告诉我应该怎么做吗? 我的代码在这里不起作用,显然是因为我从来没有在我的jsf中调用checkIfUsernameAvailable方法。我确定答案很简单,但我尝试了很多,而我却找不到它。所以我在代码中删除了我对此方法的尝试调用,因此它没有错误。

on f:ajax i put

JSF:

    <h:inputText id="username" required="true" value="#{subscribeUser.user.username}">
        <f:ajax event="blur" render="usernameCheck"}"></f:ajax>
    </h:inputText>
    <h:panelGroup id="usernameCheck" >
        <h:graphicImage value="resources/images/success_indicator.png" rendered="#{subscribeUser.isIndicatorVisible.usernameSuccess}">
        </h:graphicImage>
        <h:outputText id="usernameError" value="#{subscribeUser.isIndicatorVisible.usernameSuccess}"/>
    </h:panelGroup>

所以你看到subscribeUser.isIndicatorVisible.usernameSuccess应该总是为false。我希望当输入字段模糊时我会调用checkIfUserAvailable(),这样就可以了,然后我的图像会被渲染。

ManagedBean:

public class SubscribeUser {
    private User user;
    private Map<String, Boolean> isIndicatorVisible;

    @EJB
    Userpersistence up;

    public SubscribeUser() {
        this.user = new User();
        this.isIndicatorVisible = new HashMap<>();
        this.isIndicatorVisible.put("usernameSuccess", false);
       //...
    }

    public void checkIfUsernameAvailable() {
        this.isIndicatorVisible.replace("usernameSuccess", true);
    }
//getters & setters
}

1 个答案:

答案 0 :(得分:2)

您需要listener属性。

<f:ajax event="blur" listener="#{subscribeUser.checkIfUsernameAvailable()}" render="usernameCheck"}" />

另见:

顺便说一句,验证通常由普通验证器完成,而不是动作方法。但我认为你仍然需要了解这一部分。

另见: