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>

したがって、上記のケースでは、列をクリックするたびに、loadPreviewScreenContents(crs) を直接呼び出す代わりに、マネージド Bean で filterContentList() メソッドを呼び出します。私のビーンはRequestScopedです。私は SessionScope、ViewScope を試しましたが、これらの 2 つのスコープは、私のページに他の 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