0

在 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());
}
}
4

0 回答 0