0

次のようなリピーターを使用するテーブル行の継ぎ目ページがあります。

<a4j:repeat id="r1279186" value="#{PatientList.entities}" var="Patient" rowKeyVar="rowIndex" >
<tr>
<td>
    <a4j:commandButton action="#{PatientAction.inject(Patient)}" id="Button_1279184059161" reRender="Button_1287648925796" limitToList="true" />
</td>
<td  >
    <span >#{Patient.name_fam}</span>
</td>
<td  >
    <span >#{Patient.name_giv}</span>
</td>
    <td>
    <s:link id="Page_1234" action="#{PatientAction.inject(Patient)}"  view="/somewhere/patient_details.seam" rendered="true" target="_blank" propagation="join" title="VIS" limitToList="true" >
    <img src="images/24x24/info.png" title="VIS" alt="VIS}" style="height: 24px;width: 24px;"/>
    </s:link>
</td>
</tr>

PatientAction は、inject と呼ばれるメソッドを備えた Bean であり、入力で患者クラス オブジェクトを受け取ります。PatientList.entities は List であり、オブジェクト クラスと同じ名前である Patient という名前の var でリピーターが循環します。

ページをクライアントに返す前に、seam はリスト内の各患者 (行) の名前と姓をレンダリングし、最初の列に 1 つのボタンを追加し、最後の列に 1 つのリンクを追加します。

ボタンを使用すると、ボタンをクリックしたときにアクションが実行され、ボタンを押した行に対応する患者を挿入するパラメーターを受け取ります。[わかった!]

リンクを使用すると (新しいブラウザ ページを開いて同じ会話を維持するために使用します)、クリックすると正確にメソッド inject が呼び出されますが、渡されたパラメーターは null です!! (inject メソッドのデバッグで確認できます。来ている患者は null です)

4

1 に答える 1

1

http://docs.jboss.org/seam/2.0.1.GA/reference/en/html/elenhancements.html#d0e22695<s:link/>に記載されているように、repeat 要素からアクションにパラメーターを渡すことはできません。

引用:

反復コンポーネント内で使用する — コンポーネントは、リストまたは配列に対して同様<c:forEach/><ui:repeat/>反復し、リスト内の各項目をネストされたコンポーネントに公開します。<h:commandButton/>またはを使用して行を選択している場合、これはうまく機能します<h:commandLink/>

ただし、使用したい場合、<s:link/>または<s:button/>アイテムを として公開する必要があるDataModel場合は、<dataTable/>(または のようなコンポーネント セットの同等物)を使用し<rich:dataTable/>ます。フォーム<s:link/><s:button/>送信することも、ブックマーク可能なリンクを作成することもないため、アクション メソッドが呼び出されたときにアイテムを再作成するには、「マジック」パラメーターが必要です。この魔法のパラメータは、 によってバッキングされたデータ テーブルDataModelが使用されている場合にのみ追加できます。"

<h:commandLink/>したがって、代わりに を使用する必要があります。代わりに<s:link/>、次のようにブックマーク可能なリンクを作成できます。

<s:link view="/somewhere/patient.details.xhtml">
    <f:param name="patientId" value="#{Patient.id}" />
    ...
</s:link>

これにより、HTML で次のようなリンクが生成されます/somewhere/patient_details.seam?patientId=5。患者 ID はリンクにpatient_details.xhtml含まれているため、表示するデータを取得するために必要な情報がページに含まれています。

patient_details.page.xmlこれを行うには、ページが表示される前に値が取得されるようにパラメーター定義を配置する必要があります。次に例を示します。

<!-- Here we use an EntityHome component, assuming Patient is a JPA entity.
     When you set the ID of an EntityHome component, it automatically triggers
     an EntityManager.find() call to retrieve the Entity from DB. -->
<param name="patientId" value="#{patientHome.id}" />
于 2013-05-22T16:56:38.557 に答える