我有一個包含從列表填充的數據表的頁面。該列表有許多ID,我需要傳遞給bean方法並執行數據庫操作。我使用commandButton的呈現屬性來調用bean方法(findInfo())。我需要從列表中一次一個地傳遞一個ids(myBean.testList.id)給這個bean方法,這樣我就可以返回布爾值。首先,我不知道如何傳遞id(到我的bean中的findInfo方法),其次,如果我使用標籤,我最終只發送一個ID。任何人都可以請給我一個解決方案。我試着用下面的代碼來做這件事。將參數從JSF 2.0中的視圖/頁面中的數據表傳遞給bean方法
我的豆
@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>
UPDATE: 我試圖遵循BalusC的解釋(即kolossus發佈)的答案,我結束了傳遞ID爲空在f:param中。有什麼建議麼。我更新的代碼:
<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>
我的更新豆
@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;
}
}
另外,我覺得我不能使用F:因爲我在同一視野內調用從數據表中的豆ViewParam。
可能重複(http://stackoverflow.com/questions/ 9701590 /傳遞參數之間管理的豆與請求範圍) – kolossus
@kolossus我試圖根據您提到的帖子更改我的代碼。但它沒有奏效。我粘貼了我更新的代碼。任何幫助讚賞。 – mona
「沒有工作」.equals(「?」)。 :)它沒有參數返回null?它是否拋出異常?這些都是灼燒的問題@mona。希望你不要忘記爲'indId'添加getter和setter(我在這裏看不到它),你的'@ RequestScoped'來自'javax.faces.bean'包。作爲最後一種選擇,您可以直接在標記'action =「#{someBean.loadReport(t.id)}」'中傳遞變量,並相應地更改您的方法簽名。這僅適用於使用EL2.2的JSF – kolossus