views:

65

answers:

1

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>&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>

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 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");
}

}

My faces-config.xml

LoginForm sla.dashboard.form.LoginForm session

+1  A: 

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.

Odelya
Ok I will try and will inform you. Thankx again for your help...
Debarshi DasGupta
I will change the name from LoginForm to LoginBean. Once I am adding that annotation RAD is telling me to add an interface. public @interface ViewScope {} What will that interface contain? I dont have any idea.......
Debarshi DasGupta
You don't need interface for that. Are you adding javax.faces.bean.ViewScoped annotation? Which jsf jars are you having?
Odelya
@Odelya All the jars used in my project are as follows: commons-beanutils.jar,commons-collections.jar,commons-digester.jar,commons-logging.jar,customcomponent_annotations.jar,customcomponent.jar,icu4j_3_4_1.jar,jsf-api.jar,jsf-ibm.jar,jsf-impl.jar,jsf-impl-messages.jar,jstl.jar,odc-jsf.jar,sdo_access_beans_6.1.0.jar,sdo_web_6.1.0.jar,sitelib.jar,standard.jar
Debarshi DasGupta
actually my ide is not able to identify the package **javax.faces.bean**
Debarshi DasGupta
so you are probably using JSF1.2 and not 2.Can you please send to me the name of your jsf implementation? is it MyFaces or Sun?
Odelya
In case that you are using JSF1.2, you don't have this ViewScope element. Do you consider using JSF2? it's recommended
Odelya
It is Sun.can u pls provide me the link for jsf2 jars?
Debarshi DasGupta
Sure I can no issues. can you please provide me the link for jsf 2 jars. I just want the project to work in a proper order. I am trying this link : https://javaserverfaces.dev.java.net/servlets/ProjectDocumentList but am not able to fetch the jars.
Debarshi DasGupta
And please sugest me any sort of changes if I am wrong any where.
Debarshi DasGupta
I would recommend to you to link to:http://www.coreservlets.com/JSF-Tutorial/jsf2/click on http://www.coreservlets.com/JSF-Tutorial/jsf2/and download http://www.coreservlets.com/JSF-Tutorial/jsf2/code/jsf-blank.zipit will have a running example + jars
Odelya
@Odelya--- hey gr8 lady now this annotation is working. Now what is the advantage of having viewed scope?
Debarshi DasGupta
@Odelya Even if I refresh the page it is containing my older selection. e.g : on selection say a table is populated but again if I close my browser and open the same page that page is displayed with the old result. Can you please suggest me a change that will help me to solve this problem?
Debarshi DasGupta
With JSF2 or JSF1.2?
Odelya
with jsf 2..This time I have not added any class or interface.sorry for the delayed response.
Debarshi DasGupta
and once I add the annotation.What changes I need to do in my faces-config.xml?
Debarshi DasGupta
nothing! the annotation came to replace the faces-config file
Odelya
ok.that means I can remove the faces-config.xml? but still I am having the problem that my selection is getting cached and even if I reset the lists from the bean that page is not properly updated.
Debarshi DasGupta
live it. see the example that I sent to you above. you may need it for other declarations.
Odelya