2014-02-05 37 views
0

對象的列表:我通過使用與陣列的符號顯示此陣列JSF目標不可達, '' 0 '' 返回null:javax.el.PropertyNotFoundException

private ArrayList<LegBeanForInsert> listOfLegs; 

:0,1,... 。位置例如:

     <p:selectOneMenu value="#{otcdEventsBean.listOfLegs[0].fixvar}" 
          effect="fade" style="width:100px; height:25px" 
          panelStyle="width:80px" > 
          <f:selectItem itemLabel="Select" itemValue="" /> 
          <f:selectItems value="#{otcdEventsBean.fixedVariableCodes}" 
          itemValue="#{otcdEventsBean.listOfLegs[0].fixvar}" /> 
          <p:ajax listener="#{otcdEventsBean.fixvarchange}" event="change" update="panelUpdate"/> 
         </p:selectOneMenu> 

ERROR:

value="#{otcdEventsBean.listOfLegs[0].fixvar}": Target Unreachable, ''0'' returned null: javax.el.PropertyNotFoundException 
在bean我做的構造

public void initLeg(){ 
    for(int i=0;i<8;i++){ 
     LegBeanForInsert beanLeg = new LegBeanForInsert(); 

     beanLeg.setCallamount(new BigDecimal(0)); 

     beanLeg.setFixvar(""); 

     this.listOfLegs.add(beanLeg); 
    } 
} 

這個方法是由另一個頁面調用,當頁面renderd劑量不會有問題的網頁:

public void setProduct(Object product1, Object product2) { 
    System.out.println("BEGIN::setProduct: " + (String) product2); 
    if (product1 instanceof EqdProduct) { 
     this.eqdProdToedit = (EqdProduct) product1; 

    } else if (product1 instanceof CURROPTRBTProduct) { 
     this.rbtProdType = (CURROPTRBTProduct) product1; 

    } else if (product1 instanceof COMAsianProduct) { 
     this.comAsianProd = (COMAsianProduct) product1; 

    } else if (product1 instanceof CRDProductType) { 
     this.crdProduct = (CRDProductType) product1; 

    } else if (product1 instanceof ComSwapProduct) { 
     firstLegComSw = (ComSwapProduct) product1; 

     if (product2 instanceof ComSwapProduct) { 
      System.out.println("Com Sawp second prod"); 
      secondLegComSw = (ComSwapProduct) product2; 
     } 
    } else if (product1 instanceof List) { 

     // bisogna settare LegBeanForInsert, LE GAMBE SONO 8 !! 
     List<?> legs = (List<?>) product1; 
     String s = (String) product2; 
     System.out.println("setProduct 2nd arg: " + product2); 

     if (s.equals("Legs")) { 
      for (int i = 0; i < legs.size(); i++) { 

       Leg leg = (Leg) legs.get(i); 
       LegBeanForInsert beanLeg = new LegBeanForInsert(); 
       beanLeg.setCallamount(new BigDecimal(leg.getCallamount())); 
       beanLeg.setCallcurrency(leg.getCallcurrency()); 
       beanLeg.setCallmaturity(leg.getCallmaturityNumber()); 
       beanLeg.setCodintord(leg.getCodintord()); 
       beanLeg.setDayconvention(leg.getDayconvention()); 
       beanLeg.setEnddate(leg.getEnddate()); 
       beanLeg.setEventcode(leg.getEventcode()); 
       beanLeg.setEventtype(leg.getEventtype()); 
       beanLeg.setExercisemode(leg.getExercisemode()); 
       beanLeg.setFixvar(leg.getFixvar()); 
       beanLeg.setEndDate(leg.getFmtenddate()); 
       beanLeg.setStartDate(leg.getFmtstartdate()); 
       beanLeg.setFrequency(leg.getFrequency()); 
       beanLeg.setFrequencymultiplier(leg.getFrequencymultiplier()); 
       beanLeg.setFrequencyunit(leg.getFrequencyunit()); 
       beanLeg.setInareas(leg.getInareas()); 
       beanLeg.setIndexname(leg.getIndexname()); 
       beanLeg.setMargin(leg.getMargin()); 
       beanLeg.setNotional(leg.getNotional()); 
       beanLeg.setNumber(leg.getNumber()); 
       beanLeg.setOptioncashdelivery(leg.getOptioncashdelivery()); 
       beanLeg.setOptionmaturity(leg.getOptionMatirityNumber()); 
       beanLeg.setOptiontype(leg.getOptiontype()); 
       beanLeg.setPaycurrency(leg.getPaycurrency()); 
       beanLeg.setPutamount(leg.getPutamount()); 
       beanLeg.setPutcurrency(leg.getPutcurrency()); 
       beanLeg.setPutmaturity(leg.getPutMatirityNumber()); 
       beanLeg.setQuantityunit(leg.getQuantityunit()); 
       beanLeg.setRate(leg.getRate()); 
       beanLeg.setRateconvention(leg.getRateconvention()); 
       beanLeg.setSign(leg.getSign()); 
       beanLeg.setStartdate(leg.getStartdate()); 
       beanLeg.setStrike(leg.getStrike()); 
       this.listOfLegs.add(beanLeg); 
      } 
     } else { 
      System.out.println("MoneyD 2nd arg: " + product2); 

      for (int i = 0; i < legs.size(); i++) { 
       LegMoneyDeal leg = (LegMoneyDeal) legs.get(i); 

       this.legMoneyD.add(leg); 
      } 
     } 
    } else { 
     // non nè nessuno di quelli bisogna settare a null tutto quanto 
     otcdEvents = new OtcdEvents(); 
     crdProduct = new CRDProductType(); 
     firstLegComSw = new ComSwapProduct(); 
     secondLegComSw = new ComSwapProduct(); 
     comAsianProd = new COMAsianProduct(); 
     rbtProdType = new CURROPTRBTProduct(); 
     listOfLegs = new ArrayList<LegBeanForInsert>(); 
     legMoneyD = new ArrayList<LegMoneyDeal>(); 
     eqdProdToedit = new EqdProduct(); 
    } 

} 

構造:

public OtcdEventsBean() { 
    try { 
     Context ctx = new InitialContext(); 
     otcdEvents = new OtcdEvents(); 
     crdProduct = new CRDProductType(); 
     firstLegComSw = new ComSwapProduct(); 
     secondLegComSw = new ComSwapProduct(); 
     comAsianProd = new COMAsianProduct(); 
     rbtProdType = new CURROPTRBTProduct(); 
     ds = (DataSource) ctx.lookup("java:comp/env/jdbc/myoracleDS"); 
     rederField = true; 
     listOfLegs = new ArrayList<LegBeanForInsert>(); 
     initLeg(); 

     eqdProdToedit = new EqdProduct(); 
     legMoneyD = new ArrayList<LegMoneyDeal>(); 
     legMoneyD.add(new LegMoneyDeal()); 
     legMoneyD.add(new LegMoneyDeal()); 

     fieldsEditingDisabled = false; 

     loginBean = (LoginBean) FacesContext.getCurrentInstance().getApplication().evaluateExpressionGet(FacesContext.getCurrentInstance(), "#{loginBean}", LoginBean.class); 

     setFixedVariableCodes(new String[2]); 
     getFixedVariableCodes()[0] = "Fixed"; 
     getFixedVariableCodes()[1] = "Variable"; 

     setSignPremiumCodes(new String[2]); 
     signPremiumCodes[0] = "Pay"; 
     signPremiumCodes[1] = "Receive"; 

     setFrequencyUnitCodes(new String[4]); 
     frequencyUnitCodes[0] = "day"; 
     frequencyUnitCodes[1] = "week"; 
     frequencyUnitCodes[2] = "month"; 
     frequencyUnitCodes[3] = "year"; 

     setCashDeliveryCodes(new String[2]); 
     cashDeliveryCodes[0] = "C"; 
     cashDeliveryCodes[1] = "D"; 

     setOptionTypeCodes(new String[2]); 
     optionTypeCodes[0] = "CALL"; 
     optionTypeCodes[1] = "PUT"; 
    } catch (NamingException e) { 
     e.printStackTrace(); 
    } 
} 

全豆代碼:

http://pastebin.com/EbfuSwHN 
+0

對不起,我最後的評論是誤導。現在我唯一能想到的就是你的'listOfLegs'字段在給定的時間是空的。請發佈您的託管bean定義,以更好地分析問題。 –

+0

@LuiggiMendoza我發佈了我的完整bean代碼 –

+0

嘗試將所有託管bean構造函數邏輯移動到'@PostConstruct public void init()'方法中,重新編譯您的類,重新部署您的Web應用程序並對其進行測試。 –

回答

0

如何調用init方法。也許這沒有被調用?我沒有看到定義上的新ArrayList。你什麼時候在ArrayList上調用new?你應該在init方法中得到一個空指針異常。您可以在循環之前將新的ArrayList添加到init方法的開頭。還要記住,set方法在JSF中被多次調用,所以你應該限制set方法中的代碼。

+0

查看我的編輯 –

+0

它在構造函數 –

+0

內調用,檢查編輯新建。 –