0

我在 p:datatable 和用户点击链接时使用 primefaces commandLink。它应该导航到另一个页面,包括从表中选择的对象的特定信息。我不使用任何 ajax 标签。问题是当第一次点击链接时它没有调用操作实际上什么都没有发生,第二次点击它就可以工作。这是我的代码:

带有数据表的 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的action方法

@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;
}
4

3 回答 3

0

正如 mehmet cinar 所说,解决方案是在导航结果中使用重定向。我自己也遇到过这个问题。

返回“citizeninfo.jsf?faces-redirect=true”;

根据我的推断,原因是 ajax 提交将不包含新页面的 ViewState 请求参数。如果第一次没有 ViewState,事情就会破裂。

执行重定向后,重定向将正确地在请求中附加一个 Viewstate 参数,并且可以在第一次单击按钮

于 2013-04-08T13:54:13.093 回答
0

您可以将重定向返回到同一页面。customerView.prepareCitizenView 可以通过重定向重新运行同一页面。喜欢

return "citizeninfo.jsf?faces-redirect=true";

这个“jsf”会根据您使用的内容而变化

于 2013-04-04T13:09:46.450 回答
0

如果 p:commandLink 包含在两个 h:form 中,则将在第二次调用时调用操作。检查 p:commandLink 的外部标签

于 2013-08-01T08:48:16.913 回答