我在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