2013-11-22 45 views
1

我不知道這是可能的,所以我想我會在這裏發佈如何做到在兩個領域一個上一個字符串一個int

搜索查詢是有可能有一個輸入框,並舉例來說,如果用戶輸入一個字符串或一個int,它將搜索數據庫的兩列,即id (int)和用戶名(字符串),我怎麼能通過這是從視圖搜索,因爲我設置的類型是一個int或字符串在getters等,但我怎麼能這樣做,如果我想要搜索類型?

這是怎麼了我目前正在尋找該數據庫爲int

<h:inputText id="search" value="#{userdetailsController.search}" /> 
        &nbsp; 


        <p:commandButton value="Search" action="#{userdetailsController.submit}" update="group" /> 

的userdetailsController

private String search; 

    private List<Userdetails> item; // No need for DataModel here. 

    public List<Userdetails> getItem() { 
     return item; 
    } 

    public String submit() { 
     item = ejbFacade.searchByString(search); 
     return ""; //change this !, testing only 
    } 

    public String getSearch() { 
     return search; 
    } 

    public void setSearch(String search) { 
     this.search = search; 
    } 

,並在的UserDetails

@NamedQuery(name = "Userdetails.searchByUsername", query = "SELECT u FROM Userdetails u WHERE u.username like :username") 

謝謝你們

回答

2

只需保留屬性String並檢查操作方法是否代表數字。

E.g.

public void submit() { 
    if (search.matches("[0-9]+")) { 
     item = ejbFacade.searchByInt(Integer.parseInt(search)); 
    } else { 
     item = ejbFacade.searchByString(search); 
    } 
} 

您也可以在服務方法本身中處理它,這取決於您希望服務如何可重用。服務(EJB)的可即也與

public List<Userdetail> search(String query) { 
    if (query.matches("[0-9]+")) { 
     return searchByInt(Integer.parseInt(query)); 
    } else { 
     return searchByString(query); 
    } 
} 
可以使用通過其它前端比JSF,如JAX-RS(基於REST),純的Servlet /過濾器等

public void submit() { 
    item = ejbFacade.search(search); 
} 

相關問題