JSF2 ArrayList的搜索方法

时间:2012-08-10 01:25:42

标签: java jsf jsf-2

我正在尝试创建一个方法,允许我通过带有inputText字段的JSF页面进行搜索。我打算从位于托管bean中的arraylist中获取一个或多个条目,并在我点击提交后将其显示在JSF页面上。 我试图从这个问题中汲取灵感,但由于我是Java的新手,我一直坚持创建搜索方法: JSF2 search box

在我的JSF页面中,我打算有这样的东西,“某些东西”是我缺少的方法:

<h:form>
    <h:inputText id="search" value="#{order.something}">
        <f:ajax execute="search" render="output" event="blur" />
    </h:inputText>
    <h2>
        <h:outputText id="output" value="#{order.something}" />
    </h2>
</h:form>

在我的java文件中,我有以下arraylist'orderList',我只使用字符串:

private static final ArrayList<Order> orderList = 
    new ArrayList<Order>(Arrays.asList(
    new Order("First", "Table", "description here"),
    new Order("Second", "Chair", "2nd description here"),
    new Order("Third", "Fridge", "3rd description here"),
    new Order("Fourth", "Carpet", "4th description here"),
    new Order("Fifth", "Stuff", "5th description here")
));

希望这是足够的信息。 我想我必须从零开始制作一些全新的方法,但我现在没有太多的方法。 我怎么把这些绑在一起?任何指针都将非常感激:)

〜编辑〜 这是我的Order对象供参考,我假设我在这里使用其中一个getter?

public static class Order{
    String thingNo;
    String thingName;
    String thingInfo;

    public Order(String thingNo, String thingName, String thingInfo) {
        this.thingNo = thingNo;
        this.thingName = thingName;
        this.thingInfo = thingInfo;
    }
    public String getThingNo() {return thingNo;}
    public void setThingNo(String thingNo) {this.thingNo = thingNo;}
    public String getThingName() {return thingName;}
    public void setThingName(String thingName) {this.thingName = thingName;}
    public String getThingInfo() {return thingInfo;}
    public void setThingInfo(String thingInfo) {this.thingInfo = thingInfo;}
    }

1 个答案:

答案 0 :(得分:2)

首先,您需要在java平等方面做一些工作:

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html

搜索ArrayList(可能不是最好的结构,但确实有效)需要编写一个函数来处理它,在第一个例子中它使用commandButton的动作(执行一个方法)。你没有做过什么,因为它没有任何东西可以执行(没有方法被调用)。

如果您只是学习JSF并且您不熟悉Java,我建议您在学习生命周期之前保持简单。如果你没有扎实的Java背景,那将是非常令人沮丧的。

但是,要回答你的问题,你需要对ValueChangeEvent做一些事情,因为你没有命令(根据他的答案的后半部分)。

您的搜索方法&#34;将纯Java作用于数据结构。一个简单的实现可能是:

  public void searchByFirstValue(String search)
  {
    if(search == null || search.length() == 0)
      return;

    for(Order order : orderList)
    {
      if(order.getFirstValue().contains(search)) //java.lang.String methods via a regular expression
        setSelectedOrder(order);

      return;
    }
  }

这假设您的Order对象具有返回String的方法getFirstValue()。我还假设根据你的构造函数,值永远不会为null(还有许多潜在的陷阱)。假设您已经注册了&#39; OrderBean&#39;在web.xml中,或者您已经使用了JSF可能看起来像的ManagedBean注释:

    <h:form>
    <h:inputText id="search" valueChangeListener="#{orderBean.onChange}"> <!--Use the previous example -->
        <f:ajax execute="search" render="output" event="blur" />
    </h:inputText>
    <h2>
        <h:outputText id="output" value="#{orderBean.order}" /> <!-- this is the object from setSelectedOrder(order); -->
    </h2>
    </h:form>

希望这能指出你正确的方向。再一次,我会坚持使用actions / actionListeners,直到你了解框架的基础知识为止。从那里开始,很容易在没有大量工作的情况下转向非常复杂的动作。我说这个的原因是它们更容易调试,而且很容易理解。