我在p:datatable中使用primefaces commandLink,当用户点击链接时。它应该导航到另一个页面,包括从表中选择的对象的特定信息。我不使用任何ajax标签。问题是当第一次点击链接时它没有调用动作实际上没有任何反应,并且在第二次点击时它可以工作。这是我的代码:
JSF with Datatable
<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:searchView
DataModel citizenSearchResultList;
public DataModel getCitizenSearchResultList() {
return citizenSearchResultList;
}
答案 0 :(得分:0)
您可以将重定向返回到同一页面。 customerView.prepare CitizenView可以使用重定向返回相同的页面。 喜欢
return "citizeninfo.jsf?faces-redirect=true";
这个“jsf”会根据您使用的内容而改变
答案 1 :(得分:0)
正如mehmet cinar所说,解决方案是在导航结果中使用重定向。我自己也遇到过这个问题。
返回“citizeninfo.jsf?faces-redirect = true”;
根据我的推断,原因是ajax submit不包含新页面的ViewState请求参数。没有ViewState第一次,事情就会破裂。
执行重定向后,重定向将正确地将Viewstate参数附加到请求中,并且可以在第一次单击按钮
答案 2 :(得分:0)
如果p:commandLink包含在两个h:form中,则在第二次调用时将调用action。 检查p:commandLink
的外部标签