JSF Target Unreachable,''0'返回null:javax.el.PropertyNotFoundException

时间:2014-02-05 16:34:44

标签: jsf jsf-2

对象列表:

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

这个方法被另一个页面调用,当页面被渲染时,页面没有问题:

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

完整的bean代码:

 http://pastebin.com/EbfuSwHN

1 个答案:

答案 0 :(得分:0)

如何调用init方法。也许这不会被召集?我没有在定义中看到新的ArrayList。你什么时候在ArrayList上调用new?您应该在init方法中获得空指针异常。您可以在循环之前将新的ArrayList添加到init方法的开头。还要记住,在JSF中多次调用set方法,因此你应该限制set方法中的代码。