【问题标题】:Trying to call ajax listener method via onevent="#{checkIfUsernameAvailable}"尝试通过 onevent="#{checkIfUsernameAvailable}" 调用 ajax 侦听器方法
【发布时间】:2015-04-27 17:37:32
【问题描述】:

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

在 f: ajax 上我放了

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() 这样它就会是真的,然后我的图像就会被渲染。

托管豆:

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
}

【问题讨论】:

  • 您从哪里得知应该使用&lt;f:ajax onevent&gt; 来调用支持bean 中的ajax 侦听器方法?哪个坏书/教程/资源以这种形式向您展示了一个示例?然后我可以就这个错误信息联系它的作者。
  • 我认为在我阅读的教程中,onevent 是调用 javascript 函数,如果我没记错的话,这是正确的。我只是尝试它来调用一个bean函数,因为我只是没有找到在触发事件时如何调用该函数。你知道如何 ?说真的,已经过了一天,我只是不知道怎么做。
  • 哪个教程?我很好奇为什么它没有显示在那里,因为它通常已经被 Hello World &lt;f:ajax&gt; 在一本理智的书/教程/资源中使用示例所涵盖。
  • slideshare.net/martyhall/… 第 64 页。正如我所说,它调用了一个 JAVASCRIPT 函数,我认为这是正确的。而且那里的 tuts 做得很好。
  • 是的,Marty 通常会写出很棒的教程。太糟糕了,他在这个问题上完全忽略了listener。我迟早会通知他的。

标签: ajax jsf jsf-2


【解决方案1】:

您需要listener 属性。

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

另见:


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

另见:

【讨论】:

  • 非常感谢您的解决方案以及有关验证器的信息。我会检查一下。
  • 不客气。由于您是新来的,因此请不要忘记在回答(最)有助于理解和解决具体问题时将其标记为已接受。另请参阅 How does accepting an answer work? 在适用的情况下,不要忘记对 questions you asked previously 执行相同的操作。如果没有适用的,同时您已经自己找到了答案,那么您有义务发布并接受您自己的答案。
  • 顺便说一句,我发现你给我的链接上的第二种解决方案更容易。只是让你知道。接受的答案。
  • 对于初学者来说确实更容易(尤其是那些从未通过基本的 Java 教程学习过创建自定义注释的人,因此几乎无法理解此类自定义注释中的任何内容)。但是标准的 JSF Validator 也是以 JSF 为中心的,不能在 JSF 之外重用,而 Bean Validation 注解在 JSF 之外是可重用的(例如在 JPA 甚至“普通的”Java SE 中)。
  • 知道了。顺便说一句,我遵循了你所做的并且它有效。奇怪的是,在我的 jsf 中,我必须放入 validator="#{beanValidator.validate}" 而在您的示例中,您不必放入 validate 方法,您只需放入 beanValidator 名称。我的代码有问题吗?有没有关系,因为它有效?或者你的代码可能有错误......不要试图粗鲁,因为你现在是解释我事情的人。
猜你喜欢
  • 1970-01-01
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
  • 2020-06-13
  • 1970-01-01
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多