我在p:datatable中使用primefaces命令鏈接,並在用戶單擊鏈接時使用。它應該導航到另一個頁面,包括從表中選擇的對象的特定信息。我不使用任何ajax標籤。問題是,當第一次點擊鏈接時,它不會調用動作,實際上什麼也沒有發生,並且第二次點擊它就可以工作。這裏是我的代碼:p:commandLink在p:dataTable不會在第一次點擊時調用動作,但只在第二次點擊時調用
JSF與數據表
<h:form>
<h:outputText value="Nothing is found" rendered="#{searchView.citizenSearchList.rowCount==0}"/>
<p:dataTable var="cust" value="#{searchView.citizenSearchList}" dynamic ="true" paginator="true" rows="5" paginatorAlwaysVisible="false" style="width: 700">
<p:column>
<f:facet name ="header">
<h:outputText value="name "/>
</f:facet>
<h:outputText value="#{cust.name}"/>
</p:column>
<p:column>
<f:facet name ="header">
<h:outputText value="lastname "/>
</f:facet>
<h:outputText value="#{cust.citizenList.get(0).lastname}"/>
</p:column>
<p:column>
<f:facet name ="header">
<h:outputText value="Id "/>
</f:facet>
<h:outputText value="#{cust.registernumber}"/>
</p:column>
<p:column>
<f:facet name ="header">
</f:facet>
<p:commandLink value="See" action="#{customerView.prepareCitizenView()}"/>
</p:column>
</p:dataTable>
</h:form>
ManagedBean:customerView的操作方法
@ManagedProperty(...)
SearchView searchview;
public String prepareCitizenView(){
this.customer = (Customer) searchview.citizenSearchResultList.getRowData();
if(this.customer != null)
return "citizeninfo";
else
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "no data.", "no data"));
return null;
}
ManagedBean:搜索查看
DataModel citizenSearchResultList;
public DataModel getCitizenSearchResultList() {
return citizenSearchResultList;
}
默認情況下,PrimeFaces'p:commandLink'和'p:commandButton'使用ajax。所以聲明「我不使用任何ajax標籤」沒有理由。問題是,你究竟如何執行實際的搜索行爲,應該在該表中顯示結果?還有一個'p:commandButton'? – BalusC