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

スタック トレースによると、最初の row.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

エラーが発生した情報

行.setAttribute("ID", 123);

行の主キー属性を変更しようとしていると思いますが、これは許可されていません。発生するエラーについて言及していないため、これについてはわかりません。

于 2012-10-12T17:42:20.220 に答える
0

さて、これを回避する方法を私が理解した方法は次のとおりです。

最初に、jDeveloperにアプリケーション・モジュールのクラスを生成するように依頼しました。そのクラスでは、次のメソッドを追加しました。

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

    }

これらのメソッドは、ページ上の2つのボタンに接続されているマネージドBeanによって呼び出されています。このマネージドBeanには次の方法があります。メソッド名のみが変更されるため、そのうちの1つだけを投稿します。

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 に答える