【问题标题】:BootsFaces ajax events on inputtext not calling server bean输入文本上的 BootsFaces ajax 事件未调用服务器 bean
【发布时间】:2016-04-06 22:34:03
【问题描述】:

当这个事件(onkeyup)被触发时,adminiEvent bean 上的方法 searchClients 不会被调用。

<b:inputText placeholder="nome" required="true" id="name" 
                value="#{adminiEvent.clientOnSearch.firstName}"
                onkeyup="#{adminiEvent.searchingClients}"     update=":adminiForm:clientSearchTable"
                style="background: rgb(251, 251, 251) none repeat scroll 0% 0%;
                    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);"
                    />

有什么想法吗?

这是豆子:

@ManagedBean(name="adminiEvent" , eager=true)
@ViewScoped
public class AdminiEvent {
...
public void searchingClients(){
    List<Client> values = new ArrayList<Client>();
    //build query
    Map<String,Object> queryValues = new HashMap<String,Object>();
    StringBuilder query = new StringBuilder();

    query.append("Select c from Client c where ");

    if(!StringUtils.isEmpty(clientOnSearch.getFirstName())){
        query.append("c.firstName = :firstname");
        queryValues.put("firstname", clientOnSearch.getFirstName());
    }

    if(!queryValues.isEmpty()){
        values.addAll(clientService.findClientByFilter(query.toString(),queryValues));
    }   

    clients.addAll(values);
   }
...

谢谢

这里我做了几个测试:

onkeyup="alert('test');ajax:adminiEvent.searchingClients;javascript:alert('test 2');" 
value="#{adminiEvent.clientOnSearch.firstName}" 
style="background: rgb(251, 251, 251) none repeat scroll 0% 0%; 
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);"/>`

第一个和第二个警报运行良好,但未调用 searchClients。我在服务器端处于调试模式,但那里什么也没有。浏览器调试控制台或服务器控制台上也没有显示任何内容。

生成的 html 截图:

谢谢

【问题讨论】:

    标签: jsf bootsfaces


    【解决方案1】:

    首先,您在 BootsFaces 0.8.1 中发现了一个错误。它应该在 BootsFaces 的开发者快照中修复 - 请参阅 https://github.com/TheCoder4eu/BootsFaces-OSP/issues/151 了解如何获取它。

    其次,您尝试调用 JavaScript 方法。要将其转换为后端 bean 调用,您必须在其前面加上“ajax:”并删除大括号。另外,您必须添加 Java 方法的括号。最后,同样重要的是,这种方法必须存在。 JSF 有时会自动添加前缀,如“get”、“set”或“is”。 BootsFaces 没有。因此,您的示例应如下所示:

    <b:inputText onkeyup="ajax:adminiEvent.getSearchingClients()" ... />
    

    http://showcase.bootsfaces.net/forms/ajax.jsf阅读全文。您可能还对https://github.com/stephanrauh/BootsFaces-Examples/tree/master/AJAX 中的示例感兴趣。

    顺便说一句,我已经修复了 BootsFaces 0.8.2-SNAPSHOT 中的错误。 0.9.0-SNAPSHOT 目前比 0.8.2-SNAPSHOT 旧,因为我们已经开始修复很多错误,而不是添加新功能。

    我已经用这两个文件测试了 BootsFaces 0.8.2-SNAPSHOT:

        <?xml version='1.0' encoding='UTF-8' ?>                                                                                                                                          
        <!DOCTYPE html>                                                                                                                                                                  
        <html xmlns="http://www.w3.org/1999/xhtml"                                                                                                                                       
              xmlns:h="http://java.sun.com/jsf/html"                                                                                                                                     
              xmlns:f="http://java.sun.com/jsf/core"                                                                                                                                     
              xmlns:b="http://bootsfaces.net/ui"                                                                                                                                         
              xmlns:ui="http://java.sun.com/jsf/facelets"                                                                                                                                
              xmlns:pt="http://xmlns.jcp.org/jsf/passthrough" >                                                                                                                          
            <h:head>                                                                                                                                                                     
                <title>BootsFaces: next-gen JSF Framework</title>                                                                                                                        
                <meta name="author" content="Riccardo Massera"></meta>                                                                                                                   
            </h:head>                                                                                                                                                                    
            <h:body style="padding-top: 60px">                                                                                                                                           
            <h:form>                                                                                                                                                                     
            lorem ipsum                                                                                                                                                                  
            <b:inputText placeholder="nome" required="true" id="name"                                                                                                                    
                        onkeyup="ajax:adminiEvent.searchingClients()"                                                                                                                    
                        onclick="ajax:adminiEvent.searchingClients()"                                                                                                                    
                        update="@none"                                                                                                                                                   
                            />                                                                                                                                                           
            </h:form>                                                                                                                                                                    
           </h:body>                                                                                                                                                                     
        </html>                                                                                                                                                                          
    

        import javax.faces.bean.ManagedBean;                                                                                                                                             
        import javax.faces.view.ViewScoped;                                                                                                                                              
    
        @ManagedBean                                                                                                                                                                     
        @ViewScoped                                                                                                                                                                      
        public class AdminiEvent {                                                                                                                                                       
            private String firstName;                                                                                                                                                    
    
            public void searchingClients() {                                                                                                                                             
                System.out.println("Backend bean called: " + firstName);                                                                                                                 
            }                                                                                                                                                                            
    
            public String getFirstName() {                                                                                                                                               
                return firstName;                                                                                                                                                        
            }                                                                                                                                                                            
    
            public void setFirstName(String search) {                                                                                                                                    
                this.firstName = search;                                                                                                                                                 
            }                                                                                                                                                                            
        } 
    

    【讨论】:

    • 感谢斯蒂芬,但不幸的是,它也不是那样工作的。所以在这里我所做的更改: onkeyup="ajax:adminiEvent.searchingClients" 在最终的 html 代码上: onkeyup=";BsF.ajax.callAjax(this, event,'adminiForm:clientSearchTable','adminiForm:name', null, ' change'); 然后我更改了服务器方法: public String searchClients(){ ....} 如果我添加alert('test'); onkeyup,则触发警报。
    • 我也改成了:onkeyup="ajax:adminiEvent.searchingClients()" 但什么也没发生
    • 好的,刚刚看到您的 bean 没有 searchClients() 方法。您必须使用该方法的真实姓名和签名。在您的情况下,应该是“ajax:adminiEvent.getSearchingClients()”。
    • 是的,很抱歉我正在修改它并粘贴旧代码。现在可以了,但不能正常工作。我刚刚看到这个:link 他们说要使用 **&lt;b:inputText value="#{userBean.firstname}" onkeyup="#{userBean.onKeyUp}" update="@next" **任何想法,因为它还在用户 ajax 的示例中说:...但没有一个对我有用.../>
    • 感谢您指出我的博客需要更新。现在我已经更新了它,希望将来避免混淆。至于您的问题:JavaScript 控制台或服务器端日志中是否有任何错误消息?
    猜你喜欢
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 2014-08-20
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    相关资源
    最近更新 更多