p:p中的commandLink:dataTable不会在第一次单击时调用操作,但仅在第二次单击时调用

时间:2013-01-17 03:27:05

标签: jsf-2 primefaces datatable commandlink

我在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:s​​earchView

DataModel citizenSearchResultList;

public DataModel getCitizenSearchResultList() {
    return citizenSearchResultList;
}

3 个答案:

答案 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

的外部标签