0

我现在正在尝试学习 Oracle ADF,并且在 Java bean 上运行以下代码时遇到 NullPointerException。你能帮我弄清楚我做错了什么吗?这是从 JSPX 页面上的按钮调用的。

public String cb1_action() {
    try{
        BindingContext bindingctx = BindingContext.getCurrent();
        BindingContainer bindings = bindingctx.getCurrentBindingsEntry();
        DCBindingContainer bindingsImpl = (DCBindingContainer)bindings;
        DCIteratorBinding iter = bindingsImpl.findIteratorBinding("ViewObj1Iterator");


        Row row = iter.getCurrentRow();

        row.setAttribute("Id", 123);
        row.setAttribute("Nome", "Pedro Teste");

    }
    catch(Exception e) {
        System.out.println("Excepcao em: ");
        e.printStackTrace();
    }

    return null;
}

根据堆栈跟踪,错误发生在第一行。setAttribute() 行。此外,我正在使用带有集成 WebLogic 服务器的最新版本的 JDeveloper。

最好的祝福,

佩德罗

4

3 回答 3

2
Row row = iter.getCurrentRow();
if(row  != null){
    row.setAttribute("Id", 123);
    row.setAttribute("Nome", "Pedro Teste"); //name?
}
于 2012-10-12T16:55:41.987 回答
1

您收到错误的信息

row.setAttribute("Id", 123);

让我认为您尝试更改行的主键属性,这是不允许的。不确定这一点,因为你没有提到你得到的错误。

于 2012-10-12T17:42:20.220 回答
0

好的,这就是我想出如何解决这个问题的方法:

首先,我让 jDeveloper 为 Application Module 生成一个类。在那个类中,我添加了以下方法:

public void testEntityObject()
{
    System.out.println("Let's try our Entity Object...");

    try
    {
        EntityDefImpl entity = TesteEOImpl.getDefinitionObject();
        TesteEOImpl ti = (TesteEOImpl)entity.createInstance2(getDBTransaction(), null);
        ti.setId(new BigDecimal(123));
        ti.setNome("Entity Object test...");

        getDBTransaction().commit();

        System.out.println("Looks good :-)");
    }
    catch(Exception e) 
    {
        System.out.println("It seems something went wrong :-(");
        e.printStackTrace();
    }
}

public void testViewObject() {
    System.out.println("Let's try our View Object...");

            ViewObjectImpl vo = this.getTeste1();

        try{
            Row row = vo.createRow();
            row.setAttribute("Id", 234);
            row.setAttribute("Nome", "VO test");
            vo.insertRow(row);
            getDBTransaction().commit();
            System.out.println("Looks good :-)")
        }
        catch(Exception e) {
            System.out.println("It seems something went wrong :-(");
            e.printStackTrace();
        }

    }

这些方法由连接到页面上两个按钮的托管 bean 调用。此托管 bean 具有以下方法。我将只发布其中一个,因为只有方法名称发生了变化:

public String cb1_action() {

    try{
    FacesContext fctx = FacesContext.getCurrentInstance(); 
    BindingContext bindingContext = BindingContext.getCurrent();
    DCDataControl dc = bindingContext.findDataControl("AppModuleAMDataControl");
    AppModuleAMImpl am = (AppModuleAMImpl)dc.getDataProvider();


    am.criarTesteComEntityObject();
    }
    catch(Exception e) {
        e.printStackTrace();
    }

    return null;
}

我知道这不是火箭科学或其他任何东西,但我花了一段时间才到达那里......基本上,你的回答帮助我去调查正在发生的事情。原因?糟糕的设计!ADF应该是有组织的......谢谢大家!:D

于 2012-10-16T14:48:54.563 回答