如何克服jsf的缓存问题?

时间:2010-07-28 13:46:29

标签: java jsp jsf jstl jsf-2

我的jsp中有7个下拉(使用JSF标签 - 选择一个菜单),2个下拉取决于其他2个下拉。我的Managed Bean的范围是session.I有一个页面,我的结果是图表/表格,具体取决于下拉菜单选择。但我的选择是缓存,有时刷新代码我的bean和我的jsp页面没有得到更新。我是否需要明确地结束bean ssession?请给我一个解决方案。

我的JSP页面如下:

<%@ taglib uri =“http://www.ibm.com/jsf/html_extended”prefix =“hx”%> <%@ taglib uri =“http://java.sun.com/jsf/core”prefix =“f”%> <%@ taglib uri =“http://java.sun.com/jsf/html”prefix =“h”%><%@ taglib uri =“http://www.ibm.com/jsf/BrowserFramework”prefix =“odc”%>

SLA仪表板

         

<div id="mDiv" class="pStyle">      
<h:form styleClass="form" id="LoginForm" ><br>
    <br>
<div id="Header" class="hStyle">
        <h:outputText value= "WELCOME TO SLA DASHBOARD" />
</div>
<br><br>&nbsp;&nbsp;&nbsp;&nbsp;
<div id="fDiv" >
    <fieldset class="fStyle">
        <legend style="text-align: left;padding: 6px; font-weight:bold; font-size: 14">PLEASE MAKE YOUR SELECTION</legend><br>  
        &nbsp;&nbsp;
        <h:outputText value="BU"/>&nbsp; 
        <h:selectOneMenu id="slaBU" value="#{LoginForm.slaPeriod}"
            onchange="this.form.submit();" valueChangeListener="#{LoginForm.processBUChange}">
            <f:selectItems value="#{LoginForm.buList}" />
        </h:selectOneMenu>&nbsp;&nbsp; 
        <h:outputText>Application</h:outputText>&nbsp; 
        <h:selectOneMenu id="slaApplication" style="width:160px" value="#{LoginForm.slaApp}" required="true">
            <f:selectItems value="#{LoginForm.appList}" />
        </h:selectOneMenu>&nbsp;&nbsp;
        <h:outputText>Period</h:outputText>
        <h:selectOneMenu id="slaPeriod" value="#{LoginForm.slaPeriod}" onchange="this.form.submit()"
            valueChangeListener="#{LoginForm.processPeriodChange}" >
            <f:selectItems value="#{LoginForm.periodList}"  />
        </h:selectOneMenu>
        &nbsp; 
        <h:selectOneMenu id="slaPeriod1" style="width:100px"
            value="#{LoginForm.slaPeriod1}" required="true">
            <f:selectItems value="#{LoginForm.periodList1}" />
        </h:selectOneMenu>&nbsp;

        <h:selectOneMenu id="slaPeriod2" value="#{LoginForm.slaPeriod2}" required="true">
            <f:selectItems value="#{LoginForm.periodList2}" />
        </h:selectOneMenu>&nbsp;&nbsp; 
        <h:outputText value="SLA Group" />
        <h:selectOneMenu id="slaGroup" value="#{LoginForm.slaGroup}" required="true">
            <f:selectItems value="#{LoginForm.groupList}" />
        </h:selectOneMenu>&nbsp;&nbsp; 

        <h:outputText>View</h:outputText>&nbsp;
        <h:selectOneMenu id="slaView" value="#{LoginForm.slaView}" required="true">
            <f:selectItems value="#{LoginForm.viewList}" />
        </h:selectOneMenu> &nbsp;&nbsp;&nbsp; 
        <h:commandButton  id="submitButton" value="Submit"
             type="submit" onclick = "return validate();" 
             style="width:60px;" action="#{LoginForm.processSubmit}" 
             />
        &nbsp; 
            <br>
            <br>
        </fieldset>
    </div><br><br><br>
    <div id="tDiv" >
    <h:dataTable id="bTable" value="#{LoginForm.BT}" var="BillingTable"
            style="font-weight: bold; text-align: center;" bgcolor="#D4D7FE"
            border="4" cellpadding="1" width="60%"
            rendered="#{LoginForm.btDisplay}">

            <f:facet name="header">
                <h:outputText value="Billing Report" style="font-weight: bold"/>
            </f:facet>

            <h:column>
                <f:facet name="header">
                    <h:outputText value="Buisness Unit" />
                </f:facet>
                <h:outputText value="#{BillingTable.buName}" />
            </h:column>

            <h:column>
                <f:facet name="header">
                    <h:outputText value="Completion Date" />
                </f:facet>
                <h:outputText value="#{BillingTable.completionDate}" />
            </h:column>

            <h:column>
                <f:facet name="header">
                    <h:outputText value="Target Date" />
                </f:facet>
                <h:outputText value="#{BillingTable.targetDate}"></h:outputText>
            </h:column>
            <h:column>
                <f:facet name="header">
                    <h:outputText value="Billing Cycle" />
                </f:facet>
                <h:outputText value="#{BillingTable.billingCyle}"></h:outputText>
            </h:column>
            <h:column>
                <f:facet name="header">
                    <h:outputText value="Status" />
                </f:facet>
                <h:outputText value="#{BillingTable.status}"></h:outputText>
            </h:column>
        </h:dataTable>
        <br>
        <h:dataTable id="uTable" value="#{LoginForm.UT}" var="UptimeTable"
            style="text-align: center"  bgcolor="#D4D7FE" 
            border="4" cellpadding="1" width="60%" rendered="#{LoginForm.utDisplay}">

            <f:facet name="header">
                <h:outputText value="Uptime Report" style="font-style: normal; font-weight: bold"/>
            </f:facet>

            <h:column>
                <f:facet name="header">
                    <h:outputText value="Application Name" style="width:60px" />
                </f:facet>
                <h:outputText value="#{UptimeTable.applicationName}" />
            </h:column>
            <h:column>
                <f:facet name="header">
                    <h:outputText value="Application Class" />
                </f:facet>
                <h:outputText value="#{UptimeTable.applicationClass}" />
            </h:column>

            <h:column>
                <f:facet name="header">
                    <h:outputText value="Availability-Actual" />
                </f:facet>
                <h:outputText value="#{UptimeTable.actual}" />
            </h:column>

            <h:column>
                <f:facet name="header">
                    <h:outputText value="Availability-Target" />
                </f:facet>
                <h:outputText value="#{UptimeTable.target}"></h:outputText>
            </h:column>
        </h:dataTable>
        <br>
        <h:dataTable id="tTable" value="#{LoginForm.TT}" var="TATTable"
            style="font-weight: bold; text-align: center" bgcolor="#D4D7FE"
            border="4" cellpadding="1" width="60%"
            rendered="#{LoginForm.ttDisplay}">

            <f:facet name="header">
                <h:outputText value="Turn Around Time Report" />
            </f:facet>

            <h:column>
                <f:facet name="header">
                    <h:outputText value="Application Name" />
                </f:facet>
                <h:outputText value="#{TATTable.applicationName}" />
            </h:column>

            <h:column>
                <f:facet name="header">
                    <h:outputText value="Application Class" />
                </f:facet>
                <h:outputText value="#{TATTable.applicationClass}" />
            </h:column>

            <h:column>
                <f:facet name="header">
                    <h:outputText value="TAT Average" />
                </f:facet>
                <h:outputText value="#{TATTable.tatAverage}" />
            </h:column>

            <h:column>
                <f:facet name="header">
                    <h:outputText value="TAT Target" />
                </f:facet>
                <h:outputText value="#{TATTable.tatTarget}"></h:outputText>
            </h:column>
            <h:column>
                <f:facet name="header">
                    <h:outputText value="Request Count" />
                </f:facet>
                <h:outputText value="#{TATTable.reqCount}"></h:outputText>
            </h:column>
            <h:column>
                <f:facet name="header">
                    <h:outputText value="Request Type" />
                </f:facet>
                <h:outputText value="#{TATTable.reqType}"></h:outputText>
            </h:column>
        </h:dataTable>
        </div>
        <br>
        <h:graphicImage styleClass="graphicImage" id="reportImage" alt="Sorry records not found !!"
            value="#{LoginForm.imageLocation}" width="700" height="250" rendered="#{LoginForm.viewImage}">
            </h:graphicImage><br>
        <h3><h:outputText value="Sorry records not found !!" rendered="#{LoginForm.notFoundMsg}"/></h3> 
    </h:form>
    </div>
</hx:scriptCollector></body>

这是我的LoginForm.java - BackBean

package sla.dashboard.form;

import sla.dashboard.Search.SearchManager; import sla.dashboard.drop_down_components。; import sla.dashboard.datatables。; import java.util。; import javax.faces.context.FacesContext; import javax.faces.event。; import javax.faces.model。*;

公共类LoginForm实现了ValueChangeListener,ActionListener {

private String imageResult=null,imageLocation=null;
private int slaPeriod,slaApp,slaBU,slaPeriod1,slaPeriod2,slaGroup,periodType,slaView;


Boolean btDisplay,utDisplay,ttDisplay,viewImage,notFoundMsg;

//Table Lists
List <BillingTable> BT;
List <UptimeTable> UT;
List <TATTable> TT;

DropDownComponents ddC;  

List<SelectItem> buList;
List<SelectItem> periodList;
List<SelectItem> periodList1;
List<SelectItem> periodList2;
List<SelectItem> groupList;
List<SelectItem> appList;

List<SelectItem> viewList;

ArrayList<String> result= new ArrayList<String>();


public LoginForm()
{

    ddC=new DropDownComponents(); 
    buList=ddC.getBuList();
    this.reset();

    BT=new ArrayList<BillingTable>(); 
    UT=new ArrayList<UptimeTable>();
    TT=new ArrayList<TATTable>();

    System.out.println("\n Back Bean Object Instantiated");
}
public int getSlaBU() {
    return slaBU;
}

public void setSlaBU(int slaBU) {
    this.slaBU = slaBU;
}

public int getSlaPeriod1() {
    return slaPeriod1;
}

public void setSlaPeriod1(int slaPeriod1) {
    this.slaPeriod1 = slaPeriod1;
}

public int getSlaPeriod2() {
    return slaPeriod2;
}

public void setSlaPeriod2(int slaPeriod2) {
    this.slaPeriod2 = slaPeriod2;
}

public int getSlaGroup() {
    return slaGroup;
}

public void setSlaGroup(int slaGroup) {
    this.slaGroup = slaGroup;
}

public int getPeriodType() {
    return periodType;
}

public void setPeriodType(int periodType) {
    this.periodType = periodType;
}

public int getSlaView() {
    return slaView;
}

public void setSlaView(int slaView) {
    this.slaView = slaView;
}

public ArrayList<String> getResult() {
    return result;
}

public void setResult(ArrayList<String> result) {
    this.result = result;
}

public int getSlaApp() {
    return slaApp;
}

public Boolean getBtDisplay() {
    return btDisplay;
}

public void setBtDisplay(Boolean btDisplay) {
    this.btDisplay = btDisplay;
}

public Boolean getUtDisplay() {
    return utDisplay;
}

public void setUtDisplay(Boolean utDisplay) {
    this.utDisplay = utDisplay;
}

public Boolean getTtDisplay() {
    return ttDisplay;
}

public void setTtDisplay(Boolean ttDisplay) {
    this.ttDisplay = ttDisplay;
}

public void setSlaApp(int slaApp) {
    this.slaApp = slaApp;
}

public int getSlaPeriod() {
    return slaPeriod;
}

public void setSlaPeriod(int slaPeriod) {
    this.slaPeriod = slaPeriod;
}




public List<SelectItem> getViewList() {
    return viewList;
}

public void setViewList(List<SelectItem> viewList) {
    this.viewList = viewList;
}

public List<SelectItem> getPeriodList() {
    return periodList;
}
public void setPeriodList(List<SelectItem> periodList) {

    this.periodList = periodList;
}

public List<SelectItem> getBuList() 
{
    return buList;
}



public void setBuList(List<SelectItem> buList) {
    this.buList = buList;
}


public List<SelectItem> getPeriodList1() {
    return periodList1;
}

public void setPeriodList1(List<SelectItem> periodList1) {
    this.periodList1 = periodList1;
}

public List<SelectItem> getPeriodList2() {
    return periodList2;
}

public void setPeriodList2(List<SelectItem> periodList2) {
    this.periodList2 = periodList2;
}

public List<SelectItem> getGroupList() {
    return groupList;
}

public void setGroupList(List<SelectItem> groupList) {
    this.groupList = groupList;
}

public List<SelectItem> getAppList() {
    return appList;
}

public void setAppList(List<SelectItem> appList) {
    this.appList = appList;
}




//ValueChangeListener
public void processValueChange(ValueChangeEvent arg0) throws AbortProcessingException 
{}

public void processPeriodChange(ValueChangeEvent arg0) throws AbortProcessingException 
{
    this.setSlaPeriod(Integer.parseInt(arg0.getNewValue().toString()));
    this.setPeriodList1(ddC.getPeriodList1(Integer.parseInt(arg0.getNewValue().toString())));

    System.out.println("Period Changed Value : "+this.getSlaPeriod());
    FacesContext.getCurrentInstance().renderResponse();
}

public void processBUChange(ValueChangeEvent arg0) throws AbortProcessingException 
{
    this.setSlaBU(Integer.parseInt(arg0.getNewValue().toString()));
    this.setAppList(ddC.getAppList(Integer.parseInt(arg0.getNewValue().toString())));
    System.out.println("\n BU Slected : " + this.getSlaBU());
    FacesContext.getCurrentInstance().renderResponse();
}


public void processAction(ActionEvent arg0) throws AbortProcessingException 
{}
public List<BillingTable> getBT() {
    return BT;
}

public void setBT(List<BillingTable> bt) {
    BT = bt;
}

public List<UptimeTable> getUT() {
    return UT;
}

public void setUT(List<UptimeTable> ut) {
    UT = ut;
}

public List<TATTable> getTT() {
    return TT;
}

public void setTT(List<TATTable> tt) {
    TT = tt;
}


public void setImageLocation(String imageLocation) {
    this.imageLocation = imageLocation;
}

public String getImageLocation() {
    return imageLocation;
}

public Boolean getViewImage() {
    return viewImage;
}

public void setViewImage(Boolean viewImage) {
    this.viewImage = viewImage;
}

public void setImageResult(String imageResult) {
    this.imageResult = imageResult;
}

public String getImageResult() {
    return imageResult;
}

public Boolean getNotFoundMsg() {
    return notFoundMsg;
}

public void setNotFoundMsg(Boolean notFoundMsg) {
    this.notFoundMsg = notFoundMsg;
}

public void reset()
{
    slaPeriod=0;
    slaApp=0;
    slaBU=0;
    slaPeriod1=0;
    slaPeriod2=0;
    slaGroup=0;
    slaView=0;
    periodList=ddC.getPeriodList();
    periodList1=ddC.getPeriodList1(slaPeriod);
    periodList2=ddC.getPeriodList2();
    groupList=ddC.getSlaGroupList();
    appList=ddC.getAppList(slaApp);
    viewList=ddC.getViewList();
    this.setViewImage(false);
    this.setUtDisplay(false);
    this.setTtDisplay(false);
    this.setBtDisplay(false);
    this.setNotFoundMsg(false);

}
String getLabel(int index,List<SelectItem> lst)
{
    return(lst.get(index).getLabel());
}
public String processSubmit()
{

    System.out.println("Inside Process Submit "+this.getSlaBU()+
            this.getSlaApp()+this.getSlaPeriod()+this.getSlaPeriod1()+
            this.getSlaPeriod2()+this.getSlaGroup()+this.getSlaView());
    this.setViewImage(false);
    this.setUtDisplay(false);
    this.setTtDisplay(false);
    this.setBtDisplay(false);
    this.setNotFoundMsg(false);

    /*slaPeriod=1;
    slaApp=0;
    slaBU=1;
    slaPeriod1=1;
    slaPeriod2=2;
    slaGroup=2;
    slaView=1;*/

    if(this.slaGroup==1 && slaView==1)
    { 
        BT=new SearchManager().searchBillingTable

            (slaBU,getLabel(slaPeriod,periodList),
            slaPeriod1,getLabel(slaPeriod2,
            periodList2),getLabel(slaGroup,groupList)); 
            if(BT.size()!=0)
                this.setBtDisplay(true);
            else
                this.setNotFoundMsg(true);
    }
    else
    {
        if(this.slaGroup==2 && slaView==1)
        { 
                UT=new SearchManager().searchUptimeTable
                (slaBU,getLabel(slaPeriod,periodList),
                        slaPeriod1,getLabel(slaPeriod2,
                        periodList2),getLabel(slaGroup,groupList)); 
                if(UT.size()!=0)
                    this.setUtDisplay(true);
                else
                    this.setNotFoundMsg(true);
        }
        else
        {
            if(this.slaGroup==3 && slaView==1)
            {
                TT=new SearchManager().searchTATTable(slaBU,getLabel(slaPeriod,periodList),
                        slaPeriod1,getLabel(slaPeriod2,
                                periodList2),getLabel(slaGroup,groupList)); 
                if(TT.size()!=0)
                    this.setTtDisplay(true);
                else
                    this.setNotFoundMsg(true);

            }
            else 
            {
                if(slaView==2)
                {
                    imageResult=new SearchManager().searchImage(slaBU,
                            getLabel(slaPeriod,periodList),
                    slaPeriod1,getLabel(slaPeriod2,periodList2),
                    getLabel(slaGroup,groupList),slaView);
                    this.setImageLocation(imageResult);
                    this.setViewImage(true);
                }
                else
                {
                    this.setNotFoundMsg(true);
                }
            }
        }
}
    return("Success");
}

}

我的faces-config.xml

             登录表格         sla.dashboard.form.LoginForm         会议       

1 个答案:

答案 0 :(得分:2)

在bean名称上方使用@ViewScope。

@ViewScope
public class LoginForm{
..
}

(我相信你在JSF2中添加了faces-config。中的范围,没有必要。最好在类上面使用注释)

BTW,我建议你用JSF方式调用你的类:LoginBean而不是LoginForm。

因为它代表一个JSF托管bean。