不会调用BackBean中的提交侦听器方法

时间:2010-07-28 08:28:10

标签: java jsp jsf jstl jsf-2

我的结果表/图像将显示在同一页面中。但是不会调用提交按钮。我有两个下降,其他两个下降的值依赖于。如果我正在写immediate="true",则会调用该方法,但只设置了两个与我关联processValueChange动作的值,其他选定的值不会在bean中更新。

jsp页面如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@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"%>
<html>
<head>
<script language="javascript" src="Validation.js"></script>
<link rel="stylesheet" href="../css/style.css" type="text/css">
<title>SLA DASHBOARD</title>
</head>

<f:view>
    <body>
    <hx:scriptCollector id="scriptCollector1">

    <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"  
                 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>
</f:view>
</html>

我的支持bean登录表如下:

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 slaBU=null,slaPeriod1=null,slaPeriod2=null,slaGroup=null,
    periodType=null,periodSelected=null,slaView=null,period=null,
    imageResult=null,imageLocation=null;
    private int slaPeriod,slaApp;

    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 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 String getPeriod() {
        return period;
    }

    public void setPeriod(String period) 
    {

        this.period = period;
    }

    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 String getPeriodType() {
        System.out.println("Inside getPeriodType " + periodType);
        return periodType;
    }

    public void setPeriodType(String periodType) {
        System.out.println("Inside setPeriodType "+ periodType);
        this.periodType = periodType;
    }

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

    public String getSlaBU() {
        return slaBU;
    }

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

        return slaPeriod1;
    }

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

    public String getSlaPeriod2() {
        return slaPeriod2;
    }

    public void setSlaPeriod2(String slaPeriod2) {
        this.slaPeriod2 = slaPeriod2;
    }
    public String getPeriodSelected() {
        return periodSelected;
    }

    public void setPeriodSelected(String periodSelected) {
        this.periodSelected = periodSelected;
    }
    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 String getSlaGroup() {
        return slaGroup;
    }

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

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


    public String getSlaView() {
        return slaView;
    }

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


    //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(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;
    }
    String getLabel(String index,List<SelectItem> lst)
    {
        return(lst.get(Integer.parseInt(index)).getLabel());
    }
    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);

    }
    public String processSubmit()
    {
        System.out.println("Inside Process Submit ");
        System.out.println(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,periodList.get(slaPeriod).getLabel(),
                this.getSlaPeriod1(),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,periodList.get(slaPeriod).getLabel(),
                            this.getSlaPeriod1(),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,periodList.get(slaPeriod).getLabel(),
                    this.getSlaPeriod1(),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, 
                        periodList.get(slaPeriod).getLabel(), slaPeriod1, 
                        slaPeriod2,getLabel(slaGroup,groupList),slaView);
                        this.setImageLocation(imageResult);
                        this.setViewImage(true);
                    }
                    else
                    {
                        this.setNotFoundMsg(true);
                    }
                }
            }
    }
        return("Success");
    }


}

如何正确提交表单?

2 个答案:

答案 0 :(得分:0)

当表单未提交时,有时可能会因错误使用JSF组件而发生。

我看到你正在使用

<h:selectOneMenu id="slaView" value="#{LoginForm.slaView}" required="true">
            <f:selectItems value="#{LoginForm.viewList}" />
        </h:selectOneMenu>

来自:

viewList=ddC.getViewList();

并且所选项目进入字符串值。

你可以写一下getViewList的代码吗?

如果声明的项为int,则字符串 - 问题是slaView的类型应为int。

答案 1 :(得分:0)

只要下拉列值发生变化,您就会在FacesContext.getCurrentInstance().renderResponse();方法中调用valueChangeListener。这将导致JSF生命周期的其余阶段被跳过,直到呈现响应阶段。由于在验证阶段调用valueChangeListener方法,因此将跳过更新模型值和调用操作阶段。猜猜看,在调用动作阶段调用提交按钮,但是已经跳过了!

无论如何,创建动态依赖下拉菜单,其中完全从服务器端检索数据,而无需任何高级JavaScript和Ajax的帮助是一个真正的痛苦。在跳过其他字段的验证和保留其他字段的提交值时,您需要考虑很多事项。在JSF中也是如此。长话短说,这是一篇描述如何正确执行的文章:Populate child menu's