0

当触发此事件 (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 的截图:

在此处输入图像描述

谢谢

4

1 回答 1

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;                                                                                                                                                 
        }                                                                                                                                                                            
    } 
于 2016-04-09T12:26:28.937 回答