解僱這是我的escenario:值錯誤的客戶端ID叫UIData.getClientId在action方法UIColumn
一個H:dataTable中與備份豆一HtmlDataTable對象綁定。 在由h:列內部的命令按鈕觸發的操作方法中爲HtmlDataTable調用getClientId將數據表ID和行索引作爲clientId。 如果數據表ID是'table',則getClientId()返回表:0(或表:1,表:2 ...,具體取決於命令按鈕所在的行索引)
我期望得到只是'表'作爲clientId,因爲綁定的表總是相同的。
當我使用數據表之外的按鈕調用同一個方法時,我得到'table'。這對我來說是正確的,但我不明白爲什麼如果動作來自一個UIColumn按鈕,我得到了table:rowIndex。
JSF頁面是:
<h:form prependId="false">
<h:dataTable id="table" value="#{sessionBean.dummyData}" var="row" binding="#{sessionBean.dataTable}">
<h:column>
<f:facet name="header">
ROW ID
</f:facet>
#{row.longValue()}
</h:column>
<h:column>
<f:facet name="header">
ACTION 1
</f:facet>
<h:commandButton id="btn1" value="REFRESH CLIENT FROM UIColumn" >
<f:ajax execute="@this" render="output" listener="#{sessionBean.testAction()}" />
</h:commandButton>
</h:column>
</h:dataTable>
<h:commandButton id="btn2" value="REFRESH CLIENT outside from data table" >
<f:ajax execute="@this" render="output" listener="#{sessionBean.testAction()}" />
</h:commandButton>
<h:outputText id="output" value="#{sessionBean.clientId}" />
</h:form>
的bean:
@ManagedBean
@SessionScoped
public class SessionBean {
private List<Long> dummyData;
private String clientId;
private HtmlDataTable dataTable;
public SessionBean() {
dummyData = new ArrayList<Long>();
}
@PostConstruct
public void postConstruct(){
for(int i = 0; i < 5; i++){
dummyData.add(new Long(i));
}
}
public String getClientId() {
return clientId;
}
public void setClientId(String clientId) {
this.clientId = clientId;
}
public void testAction(){
clientId = this.dataTable.getClientId();
}
public List<Long> getDummyData() {
return dummyData;
}
public void setDummyData(List<Long> dummyData) {
this.dummyData = dummyData;
}
public HtmlDataTable getDataTable() {
return dataTable;
}
public void setDataTable(HtmlDataTable dataTable) {
this.dataTable = dataTable;
}
}
在此先感謝。我想知道這是否是正常的JSF行爲。