リストから入力されるデータテーブルを含むページがあります。リストには多くの ID があり、これを Bean メソッドに渡してデータベース操作を実行する必要があります。コマンド ボタンのレンダリングされた属性を使用して、Bean メソッド (findInfo()) を呼び出しています。ブール値を取得できるように、ID (myBean.testList.id) をリストから一度に 1 つずつこの Bean メソッドに渡す必要があります。まず、ID を (Bean の findInfo メソッドに) 渡す方法がわかりません。次に、タグを使用すると、1 つの ID だけを送信することになります。誰でも私に解決策を提案してもらえますか。以下のようなコードでやってみました。
マイビーン
@ManagedBean(name="myBean")
public class MyBean(){
public boolean findInfo(Integer indId){
boolean var = dataProvider.isIdPresent(indId); // database operation
if (var)
return true;
else
return false;
}
}
xhtml ページ
<h:dataTable value="#{myBean.testList}" var="t" >
<h:column>
<f:facet name="header">
<h:outputText value="Actions" />
</f:facet>
<h:commandButton value = "Add"
action = "#{someBean.loadReport}"
rendered = "#{myBean.findInfo() == false}"/>
<h:commandButton value = "View"
action = "#{someBean.loadReport}"
rendered = "#{myBean.findInfo() == true}"/>
</h:column>
<h:column>
...
</h:column>
</h:dataTable>
更新: BalusC が説明した (kolossus が投稿した) という回答に従おうとしましたが、f:param で ID を null として渡すことになります。助言がありますか。私の更新されたコード:
<h:dataTable value="#{myBean.testList}" var="t" >
<h:column>
<f:facet name="header">
<h:outputText value="Actions" />
</f:facet>
<h:commandButton value = "Add"
action = "#{someBean.loadReport}"
rendered = "#{myBean.findInfo() == false}">
<f:param name="id" value="#{t.id}" />
</h:commandButton>
<h:commandButton value = "View"
action = "#{someBean.loadReport}"
rendered = "#{myBean.findInfo() == true}">
<f:param name="id" value="#{t.id}" />
</h:commandButton>
</h:column>
<h:column>
...
</h:column>
私の更新された Bean
@ManagedBean(name="myBean")
@RequestScoped
public class MyBean(){
@ManagedProperty("#{param.id}")
private Integer indId;
public boolean findInfo(){
boolean var = dataProvider.isIndIdPresent(indId);
if (var)
return true;
else
return false;
}
}
また、同じビュー内のデータ テーブルから Bean を呼び出しているため、f:ViewParam を使用できないと思います。