2009-11-08 85 views
1

我遇到了將參數傳遞給Oracle ADF中的JSP中的託管bean的問題。下面是一個例子JSP測試頁我想參數傳遞到測試方法的POJO:ADF:通過JSP中的託管bean調用方法

<?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有什麼建議?

回答

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

這不是合法的統一表達式語言表達式。你也許可以做到這樣的:

#{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 
    } 

顯然,這是十分可怕的。

您可以嘗試implementing a custom function的形式#{stuff:callTest(pageFlowScope.customerFacadeBean, 'test1', 'test2')}

實施JSP 2.1 Maintenance Release 2的服務器應支持表格#{mybean.something(param)}read this for more info)。一些框架可能已經支持這種語法 - 值得檢查文檔。