0

ビュー Search.xhtml を使用して seam-gen によって最初に生成された Seam アプリケーションがあります。

Search.xhtml には多数の入力フィールドがあり、その半分は Office エンティティにバインドされ、半分は Devices エンティティにバインドされています。

たとえば、ホスト名を入力するとデバイスのフィールドにバインドされ、都市を入力するとオフィスのフィールドにバインドされます。

デスティネーション ページは、デフォルトで OfficeResult.xhtml になります。「Devices」プロパティが入力されている場合は、DeviceResult.xhtml になります。

私の質問には2つの部分があります:

  1. 送信ボタンの Search.xhtml でどのコンポーネントを使用すればよいですか? h:commandButton を想定していますが、アクションには何を使用すればよいでしょうか。宛先ビューを使用する場合、それは page.xml ファイルのナビゲーション ルールによって上書きされますか?

  2. Search.page.xml ファイルを設定する方法は? パラメータでナビゲーションを調整するにはどうすればよいですか?

これが Search.xhtml (疑似コード) です。

<h:inputText value="#{devicesList.devices.devSerialNum}" />
<h:inputText id="state" value="#{officeList.office.state}" />

<h:commandButton id="search" action="/OfficeResult.xhtml" value="Search"  />

Search.page.xml (疑似コード):

<navigation>
  <rule if devSerNum is set >
<redirect view-id="/DeviceResult.xhtml"/>
  </rule>
  <rule if state is set >
    <redirect view-id="/OfficeResult.xhtml"/>
  </rule>
</navigation>
4

2 に答える 2

0

ナビゲーションがどのように機能するかを理解するのにも苦労しました。私は最終的にある程度の作業をしています。ここに私が試してみたいいくつかのアイデアがあります

  1. 最初に pages.xml を使用して、ナビゲーションがデフォルトの単純なルールセットで機能することを確認します。/WEB-INF/pages.xml

  2. 何が起こっているのかわからない場合は、アプリケーションのトレースログレベルを有効にしてください。Seam がコンポーネントを見つけられない可能性があります。2.1 #{devicesList ... } は、コンポーネントの名前が devicesList でない限り、components.xml にインポートしないと見つからない場合があります。私のコンポーネントは、完全修飾名 com.stackoverflow を使用しています... その利点は、競合を回避できることですが、コンポーネントにアクセスするには、完全なパスを書き出すか、上記のようにインポートを行う必要があります。

  3. ビュー ID が存在することを確認します (/OfficeResult.xhtml および /DeviceResult.xhtml)

  4. すべてのページが一度だけ宣言されていることを確認してください

  5. あなたの commandButton は、私の理解では実際のコンポーネントである必要があります。searchAction がある場合、次のようになります。

    #{searchAction.search}

seam の例をチェックしてください。それらはうまく機能し、さまざまなことを行う方法を示しています。それらはすべてのサンプルを含む約 130 MB の seam ソース コードでダウンロードできます。

ウォルター

于 2009-07-06T23:12:18.993 に答える