2013-11-19 2 views
2

жаль, если это плохой вопрос, но это одна особенность, так как сводит меня с ума в течение нескольких дней, так что я думал, идентификатор разместить его здесь, чтобы увидеть, если вы, ребята, можете помочь мнеФункция поиска ничего не делает

в основном все, что я хочу сделать из страницы JSF есть пользователь поиск пользователя и для меня, чтобы вернуть все детали

<h:form id="searchForm"> 
        <h:outputLabel value="Search: " style="font-weight:bold" /> 
        <h:inputText id="search" value="#{userdetailsController.search}" /> 
        <h:commandButton value="Search" action="index"/> 

       </h:form> 

что на страницах JSF, работает нормально

он называет мой userdetailsController класса

@Named("userdetailsController") 
@SessionScoped 
public class UserdetailsController implements Serializable { 

    private Userdetails current; 
    private DataModel items = null; 
    @EJB 
    private Richard.beans.UserdetailsFacade ejbFacade; 
    private PaginationHelper pagination; 
    private int selectedItemIndex; 
    private String search; 

    public String getSearch() { 
     System.out.println("inGetSearch"); 
     return search; 
    } 

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

contactsService класс

@Stateless 
public class ContactsService { 
    // Add business logic below. (Right-click in editor and choose 
    // "Insert Code > Add Business Method") 

    @EJB 
    private UserdetailsFacade cf; 

    public List<Userdetails> searchByString(String string) { 
     return cf.searchByString(string); 
    } 


    public List<Userdetails> getAllPersons() { 
     return cf.findAll(); 
    } 
} 

AbstractFacade класс

/* trying out a search function */ 
    public List<T> searchByString(String string) { 
     System.out.println("in SearchByString"); 
     return getEntityManager().createNamedQuery("Userdetails.findByUsername").setParameter("string", "%" + string + "%").getResultList(); 
    } 

и класс UserDetails с запросом я пытаюсь искать

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

В настоящее время только добытчиками и настройки работают в Getsearch

, как я не могу сделать эту работу, как я провел день на эту функцию и все еще не ближе, жаль, что это мой первый раз на этом

спасибо ребята

EDIT

бы добавление

public List<Userdetails> getAllPersons() { 
    if (search == null) { 
     return cs.getAllPersons(); 
    } 
    return cs.searchByString(search); 
} 

в UserdetailsController достаточно?

+1

До сих пор в вашем коде вы не выполняли поиск пользователей в любом месте. –

+0

нормально, как я могу это сделать? извините, это мой первый переход на jpa – user2061913

+0

Это не проблема JPA. Вы должны взять книгу и начать читать об основном JSF, а другой - JPA. –

ответ

3

Вы не вызывая каких-либо действий здесь:

<h:commandButton value="Search" action="index"/> 

Так что это действительно логично, что это не «делать ничего».

Вам необходимо вызвать управляемое действие боб, который в свою очередь, выполняет требуемый код, чтобы получить нужные данные из БД и присвоить свойству:

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

с внутренней UserdetailsController:

private String search; 
private List<UserDetail> items; // No need for DataModel here. 
@EJB 
private UserdetailsFacade ejbFacade; 

public String submit() { 
    items = ejbFacade.searchByString(search); 
    return "index"; 
} 

Все ваше ContactsService кажется бесполезным, кстати.

Согласно вашей попытке в методе геттера при обновлении вашего вопроса, пожалуйста, не делайте этого. Вы никогда не должны вызывать БД в методе геттера по причинам, указанным в Why JSF calls getters multiple times

+0

Привет, спасибо большое за ответ, он теперь работает и все, но когда я ищу имя пользователя 'test', я получаю следующее сообщение об ошибке ' java.lang.IllegalArgumentException: вы попытались установить значение параметра, используя имя строки, которая не существует в строке запроса SELECT u FROM Userdetails u WHERE u.username =: username.' как можно исправить – user2061913

+2

Это не связано с вопросом, который в настоящее время задан. Нажмите «Задать вопрос» справа вверху, чтобы получить ответ на это. – BalusC

Смежные вопросы