2013-03-08 27 views
0

我試圖傳遞值throught AF:PARAM裏面啊:selectOneMenu用於像示於以下代碼:Null值:PARAM裏面啊:selectOneMenu用於在JSF

<h:selectOneMenu value="#{jbpmAPIUtil.procNdNameSelectedValue}"> 
              <f:selectItem itemLabel="" itemValue="" /> 
              <f:selectItems value="#{jbpmAPIUtil.procnodes}" var="pn" 
               itemLabel="#{pn.getName()}" itemValue="#{pn.getId()}" /> 
              <f:ajax event="click" listener="#{jbpmAPIUtil.OnONeMenuProcNdSelChgeHndler}" /> 
              <f:param value="${msntoc.getWorkitemid()}" name="msntocwiid"/>           
             </h:selectOneMenu> 

IVE的甚至改變了值到f:參數去一個字符串,但總是有試圖獲得在處理該值時爲空:

public static void OnONeMenuProcNdSelChgeHndler(AjaxBehaviorEvent vce){ 

     String msntocwiid = FacesContext.getCurrentInstance().getExternalContext() 
       .getRequestParameterMap() 
       .get("msntocwiid"); 


     System.out.println("procNdNameSelectedValue : "+procNdNameSelectedValue+" msntocwiid :"+msntocwiid); 



    } 

不中selectOneMenu用於支持F:PARAM?有沒有另一種方式來傳遞一個值呢?

感謝您的幫助!

+0

是否存在'getWorkitemid' =>'getWorkitemId'的拼寫錯誤,並且有使用$ sign的原因? – 2013-03-08 21:22:53

+0

不,$是EL,正如我上面提到的那樣,我用一個字符串測試了param的值,它也沒有工作。 – Bardelman 2013-03-09 21:48:35

回答

2

<f:param>子添加一個請求參數僅在UICommand組件(例如<h:commandLink><h:commandButton>等)的支持。它在UIInput組件中不受支持。

你的具體情況你已經2個選項反正來實現具體功能要求:

  1. 把它作爲監聽方法的參數來代替。

    <h:selectOneMenu ...> 
        ... 
        <f:ajax ... listener="#{jbpmAPIUtil.OnONeMenuProcNdSelChgeHndler(msntoc.workitemid)}" /> 
    </h:selectOneMenu> 
    

    public void OnONeMenuProcNdSelChgeHndler(String msntocwiid) { 
        // ... 
    } 
    

  2. 或者,如果你真的需要有一個手AjaxBehaviorEvent一些不明原因,然後以編程方式對其進行評估。

    public void OnONeMenuProcNdSelChgeHndler(AjaxBehaviorEvent event) { 
        FacesContext context = FacesContext.getCurrentInstance(); 
        String msntocwiid = context.getApplication().evaluateExpressionGet(context, "#{msntoc.workitemid}", String.class); 
        // ... 
    } 
    

您是在道路可怕的命名約定。我強烈建議閱讀關於此主題的official resource以使其自己,未來的維護者和我們更快樂。