2010-07-28 83 views
0

我的结果表/图像将显示在同一页面中。但提交按钮不被调用。我有两个下拉菜单,其他两个下拉菜单的值依赖于这两个下拉菜单。如果我正在写immediate="true"该方法被调用,但只有两个值与我关联的processValueChange动作被设置,其他所选值不会在bean中更新。提交BackBean中的监听器方法未被调用

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


} 

如何正确提交表单?

+0

因此...很多...代码...必须...删除...样板文件... * hnnnggh * – f1sh 2010-07-28 08:36:40

+0

@ f1sh:下次看到它时按'Ctrl + W'。 – BalusC 2010-07-28 11:48:09

+0

@BalusC你gr8! – Dejell 2010-07-28 13:18:12

回答

0

当表单没有被提交时,有时可能是由于错误地使用了JSF组件。

我看到你正在使用

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

它来源于:

viewList=ddC.getViewList(); 

和所选择的项目进入一个字符串值。

请问您可以编写代码getViewList

如果项目被声明为int,则String - 比问题是slaView应该是int类型。

+0

当然......我为所有的下降做了一个单独的课。我正在调用方法来获取下拉列表: List viewList = new ArrayList (); public List getViewList() { \t \t viewList.clear(); (new SelectItem(0,“Select”)); \t \t viewList.add(new SelectItem(1,“Table”)); \t \t viewList。add(new SelectItem(2,“Graph”)); \t \t return viewList; } 如果您需要我可以粘贴该类的整个代码。 感谢您的回复。 – 2010-07-28 09:15:30

+0

@Debarshi - 你可以在你的代码中看到我的答案。 添加(新的SelectItem(2,“图形”))第一个项目是int(2),第二个项目是String(“图形”)。这意味着slaView也必须是int类型而不是String类型。 同样,h:selectOnMenu的其余值必须是int类型。 – Dejell 2010-07-28 09:32:57

+0

好的谢谢你的建议我正在尝试。一旦完成,我会更新你。 – 2010-07-28 09:41:11

0

每当下拉值发生变化时,您都会在valueChangeListener方法中调用FacesContext.getCurrentInstance().renderResponse();。这将导致JSF生命周期的剩余阶段被跳过,直到呈现响应阶段。由于在验证阶段调用valueChangeListener方法,因此会跳过更新模型值和调用操作阶段。并且猜测是什么,在调用操作阶段将调用提交按钮,但这已被跳过!

无论如何,创建动态依赖下拉菜单,其中的数据完全从服务器端检索没有任何先进的JavaScript和Ajax的帮助是一个真正的痛苦。考虑到跳过其他字段的验证并保留其他字段的提交值,您必须考虑很多事项。所以也在JSF中。长话短说,这里有一篇文章介绍了如何正确做到这一点:Populate child menu's

+0

亲爱的Balus, 我是你的忠实粉丝。感谢您的建议和时间。看到问题是如果我删除此语句FacesContext.getCurrentInstance()。renderResponse();我的价值观正在选择选择一个菜单。使用jsf存在一个页面缓存的大问题,你有解决方案吗?我正在计划的是使用js手动重置下拉菜单。它会是fyn吗? – 2010-07-28 13:23:25

+0

您需要这一行,但要结合'immediate =“true”'和**组件绑定**。这样做只适用于用于更新另一个更改下拉菜单的下拉菜单。另请参阅链接的文章以获取有效的代码示例。 – BalusC 2010-07-28 13:53:30

+0

好的,谢谢loooooot。 – 2010-07-28 14:04:57

相关问题