How to overcome caching problem of jsf?
I have 7 drop down in my jsp(Using JSF tag-Select One Menu), 2 drop downs are dependent on other 2 drop downs. The scope of my Managed Bean is session.I have a single page and my result is a graph/table depending on the drop down menu selection. But my selection is getting cached and at times on refreshing the code my bean and my jsp page is not getting updated. Do I need to explicitly end the bean ssession? Please suggest me a solution.
My JSP page is as follows :
<%@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 DASHBOARD
<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>
<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>
<h:outputText value="BU"/>
<h:selectOneMenu id="slaBU" value="#{LoginForm.slaPeriod}"
onchange="this.form.submit();" valueChangeListener="#{LoginForm.processBUChange}">
<f:selectItems value="#{LoginForm.buList}" />
</h:selectOneMenu>
<h:outputText>Application</h:outputText>
<h:selectOneMenu id="slaApplication" style="width:160px" value="#{LoginForm.slaApp}" required="true">
<f:selectItems value="#{LoginForm.appList}" />
</h:selectOneMenu>
<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>
<h:selectOneMenu id="slaPeriod1" style="width:100px"
value="#{LoginForm.slaPeriod1}" required="true">
<f:selectItems value="#{LoginForm.periodList1}" />
</h:selectOneMenu>
<h:selectOneMenu id="slaPeriod2" value="#{LoginForm.slaPeriod2}" required="true">
<f:selectItems value="#{LoginForm.periodList2}" />
</h:selectOneMenu>
<h:outputText value="SLA Group" />
<h:selectOneMenu id="slaGroup" value="#{LoginForm.slaGroup}" required="true">
<f:selectItems value="#{LoginForm.groupList}" />
</h:selectOneMenu>
<h:outputText>View</h:outputText>
<h:selectOneMenu id="slaView" value="#{LoginForm.slaView}" required="true">
<f:selectItems value="#{LoginForm.viewList}" />
</h:selectOneMenu>
<h:commandButton id="submitButton" value="Submit"
type="submit" onclick = "return validate();"
style="width:60px;" action="#{LoginForm.processSubmit}"
/>
<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>
Here is my 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.*;
public class LoginForm implements 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 setViewLis开发者_运维知识库t(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");
}
}
My faces-config.xml
LoginForm sla.dashboard.form.LoginForm session
Use @ViewScope above the bean name.
@ViewScope
public class LoginForm{
..
}
(I believe that you add the scope in faces-config. in JSF2 there is no need to it. Better to use an annotation above the class)
BTW, I would recommend to you to call your class in the JSF way: LoginBean and not LoginForm.
Since it represents a JSF managed bean.
精彩评论