1

OracleADF内のJSPでマネージドBeanにパラメータを渡す際に問題が発生しています。これは、POJOのテストメソッドにパラメーターを渡そうとしているJSPテストページの例です。

<?xml version='1.0' encoding='windows-1252'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
  <jsp:directive.page contentType="text/html;charset=windows-1252"/>
  <f:view>
    <af:document title="Automated Scheduling Tool > Customer Portal > Packages"
                 id="d1">
      <af:messages id="m1"/>
      <af:form id="f1">
        <center>
          <br/><br/><br/>
          <table cellspacing="0" cellpadding="45" width="800">
            <tr>
              <td width="100%" class="darkBackground">
                <span class="largeTitle">AUTOMATED SCHEDULING TOOL</span>                 
                <br/>                 
                <span class="mediumTitle">CUSTOMER PORTAL</span>
              </td>
            </tr>
            <tr>
                <af:outputText value="#{pageFlowScope.customerFacadeBean.test['test1', 'test2']}" id="ot1" />
            </tr>
          </table>
        </center>
      </af:form>
    </af:document>
  </f:view>
</jsp:root>

public class CustomerFacade {
    private final PackageMapper mapper;
    private List<Package> packages;

    public CustomerFacade() {
        mapper = new PackageMapper();
        packages = mapper.findAllPackages();
    }

    public List<Package> getPackages() {
        return packages;
    }


    public String test(String testString1, String testString2){
        System.out.println(testString1 + testString2);
        return "Success!";
    }
}

マネージドBeanを介してパラメーターをPOJOに渡す方法について誰か提案がありますか?

4

2 に答える 2

2
#{pageFlowScope.customerFacadeBean.test['test1', 'test2']}

これは、正規の Unified Expression Language 式ではありません。おそらく次のようなことができます。

#{pageFlowScope.customerFacadeBean.test['test1']['test2']}

...testマップのマップに解決された場所:

  public Map<Object, Map<Object, Object>> getTest() {
    return new HashMap<Object, Map<Object, Object>>() {
      @Override
      public Map<Object, Object> get(final Object test1) {
        return new HashMap<Object, Object>() {
          @Override
          public Object get(Object test2) {
            return getSomething(test1, test2);
          }
        };
      }
    };
  }

  private Object getSomething(Object test1, Object test2) {
    //TODO
  }

明らかに、これは本当に醜いです。

フォームにカスタム関数を実装してみてください#{stuff:callTest(pageFlowScope.customerFacadeBean, 'test1', 'test2')}

JSP 2.1 Maintenance Release 2を実装するサーバーは、フォームの式をサポートする必要があります#{mybean.something(param)}(詳細については、こちらを参照してください)。一部のフレームワークは、この構文を既にサポートしている可能性があります。ドキュメントを確認する価値があります。

于 2009-11-08T12:28:21.450 に答える
0

上記に似たやや洗練された代替ソリューションがあります: http://wiki.apache.org/myfaces/Parameters_In_EL_Functions

于 2010-02-09T04:24:05.920 に答える