gpt4 book ai didi

java - JSF2 ArrayList 的搜索方法

转载 作者:行者123 更新时间:2023-11-30 04:42:40 26 4
gpt4 key购买 nike

我正在尝试创建一种方法,允许我通过带有 inputText 字段的 JSF 页面进行搜索。我打算从位于托管 bean 中的数组列表中获取一个或多个条目,并在单击“提交”后将其显示在 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 文件中,我有以下数组列表“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 对象供引用,我假设我在这里使用了其中一个 setter/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;}
}

最佳答案

首先,您需要对 Java 相等性进行一些处理:

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

搜索 ArrayList(可能不是最好的结构,但它确实有效)需要编写一个函数来处理它,在第一个示例中,它使用 commandButton 的操作(执行方法)。你所拥有的不会做任何事情,因为它没有任何东西要执行(没有调用任何方法)。

如果您刚刚学习 JSF 并且不熟悉 Java,我建议您保持简单,直到您了解生命周期。如果您没有扎实的 Java 背景,这可能会非常令人沮丧。

但是,要回答您的问题,您需要对 ValueChangeEvent 执行一些操作,因为您没有该命令(根据他答案的后半部分)。

您的“搜索方法”将是作用于数据结构的纯 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()。我还假设根据您的构造函数,值永远不会为空(有很多潜在的陷阱)。假设您已在 web.xml 中注册了“OrderBean”或者您已使用 ManagedBean 注释,您的 JSF 可能如下所示:

    <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 直到你掌握了框架的基础知识。从这里开始,无需做太多工作就可以很容易地转向非常复杂的操作。我这么说的原因是它们更容易调试并且非常容易理解。

关于java - JSF2 ArrayList 的搜索方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11894267/

26 4 0