jsf - 搜索功能没有执行任何操作

标签 jsf search jpa derby

抱歉,如果这是一个糟糕的问题,但是这个功能已经让我发疯好几天了,所以我想把它发布在这里,看看你们是否可以帮助我

基本上我想要从 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")})

目前只有 getter 和设置在 Getsearch 中起作用

我如何才能完成这项工作,因为我已经花了几天时间研究这个功能,但仍然没有更接近,抱歉,这是我第一次这样做

谢谢大家

编辑

会添加

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

在 UserdetailsController 中就足够了吗?

最佳答案

您没有在此处调用任何操作:

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

所以它没有“做任何事情”确实是合乎逻辑的。

您需要调用托管 bean 操作,该操作又执行所需的代码以从数据库获取所需的数据并分配给属性:

<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 似乎毫无用处。

根据您在更新问题时尝试使用 getter 方法,请不要这样做。由于 Why JSF calls getters multiple times 中提到的原因,您永远不应该在 getter 方法中调用数据库。

关于jsf - 搜索功能没有执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20080195/

相关文章:

java - f :validateRequired does not work on Tomcat

java - 修改richfaces中组合框按钮的背景

html - h :commandbutton?的类型之间到底有什么区别

python - 将行从一个文件复制到另一个文件

tomcat - 在没有 Spring 的情况下配置 JPA 和 JOTM

java - PrimeFaces Dock 图标问题

python - 如何编写 __iter__ 从叶节点迭代回根?

java - HTML 搜索验证 android

java - Toplink IN 子查询

java - @ManyToOne(optional=false) 与 @Column(nullable=false) 有什么区别