1

inputTextフィールドを使用してJSFページを介して検索できるメソッドを作成しようとしています。管理対象Beanにあるarraylistから1つ以上のエントリを取得し、送信を押すとJSFページに表示する予定です。私はこの質問からインスピレーションを得ようとしましたが、私はJavaの初心者であるため、検索メソッドの作成に固執しています: JSF2検索ボックス

私の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")
));

これが十分な情報であることを願っています。まったく新しいメソッドを最初から作成する必要があると思いますが、現時点ではあまりありません。これらをどのように結び付けるのですか?任意のポインタをいただければ幸いです:)

〜edit〜これが参照用のOrderオブジェクトです。ここで、ゲッターの1つを使用していると思いますか?

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;}
    }
4

1 に答える 1

2

まず、Javaの同等性を使用していくつかの作業を行う必要があります。

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

ArrayListを検索すると(おそらくこれに最適な構造ではありませんが、機能します)、それを処理する関数を作成する必要があります。最初の例では、commandButtonのアクション(メソッドの実行)を使用します。実行するものがないため、何もしません(メソッドは呼び出されません)。

JSFを学習しているだけで、Javaに慣れていない場合は、ライフサイクルを学習するまで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オブジェクトに文字列を返すメソッドgetFirstValue()があることを前提としています。また、コンストラクターに基づいて値がnullになることはないと想定しています(潜在的な落とし穴がたくさんあります)。「OrderBean」をweb.xmlに登録したか、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に固執します。そこから、多くの作業をせずに非常に複雑なアクションに移行するのは非常に簡単です。私がこれを言う理由は、それらがデバッグしやすく、非常に理解しやすいからです。

于 2012-08-10T02:13:19.940 に答える