每次通过单击每行进行ajax调用时,避免加载数据表

时间:2013-04-10 17:57:57

标签: jsf jsf-2

在JSF2中 - 每当我通过单击每个列行进行ajax调用时,我都会看到我的数据表重新加载。有没有办法在每次进行ajax调用时停止加载?这会通过将我的数据表重置为默认值而产生问题,并且我在托管bean上得到错误的值。

<h:inputText size="8" id="startDate"
value="#{contactBean.startDate}">
<f:convertDateTime pattern="MM/dd/yyyy" type="date" />
</h:inputText>
<h:outputText> - </h:outputText>
<h:inputText size="8" id="endDate" value="#{contactBean.endDate}">
<f:convertDateTime pattern="MM/dd/yyyy" type="date" />
</h:inputText>
<h:commandButton value="Filter"  
actionListener="#{contactBean.loadAJAXFilterContentList}">
<f:ajax render=":form1:tableContents" />
</h:commandButton>

<h:dataTable id="tableContents"
value="#{contactBean.filterContentList}" var="crs"
binding="#{contactBean.dataTable}" border="1">

    <h:column>
        <f:facet name="header">
            <h:outputText styleClass="contactTableHeader" value="Date/Time" />
        </f:facet>
        <h:commandLink action="#{contactBean.loadPreviewScreenContents(crs)}">
            <h:outputText title="#{crs.dateTime}" value="#{crs.dateTime}">
                <f:convertDateTime pattern="MM/dd/yyyy hh:mm a" type="date" />
            </h:outputText>

            <f:ajax render=":form1:previewScreen" />
        </h:commandLink>
    </h:column>
</h:dataTable>


<h:panelGrid id="previewScreen">
    <h:outputText styleClass="PreviewHeader"
        value="Preview of #{contactBean.previewCntDateTime}" />
</h:panelGrid>

所以在上面的例子中,每当我点击列时,它都会调用托管bean中的filterContentList()方法,而不是直接调用loadPreviewScreenContents(crs)。 我的bean是RequestScoped。我尝试使用SessionScope,ViewScope,但这两个范围保留了我之前的状态,比如我在页面中有其他ajax功能,它保留了该状态。所以我不能在这种情况下使用Session或ViewScopes。

有解决方案吗?

Bean code:
@ManagedBean(name = "contactBean")
@RequestScoped
public class ContactManagedBean implements Serializable {
private static final long serialVersionUID = 1L;
List<ContactResponseBean> filterContentList = new ArrayList<ContactResponseBean>();
ContactRequestBean contactRequestBean = new ContactRequestBean();
ContactResponseBean crs = new ContactResponseBean();
private String logText;
HtmlDataTable dataTable;
public void setFilterContentList(List<ContactResponseBean> filterContentList) {
this.filterContentList = filterContentList;
}
public void setFilterContentList(List<ContactResponseBean> filterContentList) {
    this.filterContentList = filterContentList;
}
public Date getPreviewCntDateTime() {
    return previewCntDateTime;
}
public void setPreviewCntDateTime(Date previewCntDateTime) {
    this.previewCntDateTime = previewCntDateTime;
}
public String getLogText() {
    return logText;
}

public void setLogText(String logText) {
    this.logText = logText;
}
public HtmlDataTable getDataTable() {
    return dataTable;
}

public void setDataTable(HtmlDataTable dataTable) {
    this.dataTable = dataTable;
}
public ContactResponseBean getCrs() {
    return crs;
}
public void setCrs(ContactResponseBean crs) {
    this.crs = crs;
}

   public Date getStartDate() {
    return startDate;
}
public void setStartDate(Date startDate) {
    this.startDate = startDate;
}

public Date getEndDate() {
    return endDate;
}
public void setEndDate(Date endDate) {
    this.endDate = endDate;
}

public void loadAJAXFilterContentList() {
    filterButtonAjxFlag = true;
}

public List<ContactResponseBean> getFilterContentList() {   
        ContactRequestBean contactRequestBean = new ContactRequestBean();
        contactRequestBean.setUserId(getUserId());
        contactRequestBean.setSummaryType(getSummaryType());
        contactRequestBean.setStartDate(getStartDate());
        contactRequestBean.setEndDate(getEndDate());
            ContactRequestBeanService crbs = new ContactRequestBeanService();
        filterContentList = crbs.getFilterContentList(contactRequestBean);
    return filterContentList;
}
public void loadPreviewScreenContents(){
crs = (ContactResponseBean) dataTable.getRowData();
setPreviewCntDateTime(crs.getDateTime());
}
}

0 个答案:

没有答案