我正在尝试创建一个方法,允许我通过带有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;}
}
答案 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,直到你了解框架的基础知识为止。从那里开始,很容易在没有大量工作的情况下转向非常复杂的动作。我说这个的原因是它们更容易调试,而且很容易理解。