2011-11-26 24 views
1

我在支持bean中有一個方法,它將Question對象作爲參數。我想在用戶點擊按鈕/鏈接時調用的方法中將數據表中的問題變量作爲參數傳遞。但是,在我嘗試使用#{bean.deleteQuestion(question)}時,我只能在EL中出錯。我該怎麼做?如何使用鏈接參數調用方法

 <p:dataTable value="#{bean.questions}" var="question" 
      id="questionTable" paginator="true" rows="15" 
      paginatorTemplate="{CurrentPageReport} {PreviousPageLink} {PageLinks} {NextPageLink} {RowsPerPageDropdown}" 
      rowsPerPageTemplate="15,25,50" paginatorPosition="bottom"> 
      <p:column sortBy="#{question.id}"> 
       <f:facet name="header">ID</f:facet> 
       <h:outputText value="#{question.id}" /> 
      </p:column> 
      <p:column sortBy="#{question.description}"> 
       <f:facet name="header">Description</f:facet> 
       <h:outputText value="#{question.description}" /> 
      </p:column> 
      <p:column> 
       <f:facet name="header">Operations</f:facet> 
       <h:link value="Show" outcome="pretty:showQuestion"> 
        <f:param name="id" value="#{question.id}" /> 
       </h:link> 
        &nbsp;|&nbsp; 
        <h:link value="Edit" outcome="pretty:editQuestion"> 
        <f:param name="id" value="#{question.id}" /> 
       </h:link> 
        &nbsp;|&nbsp; 
        // HERE I WANT A DELETE LINK/BUTTON ! 
       </p:confirmDialog> 
      </p:column> 
     </p:dataTable> 
+1

堆棧跟蹤在哪裏?我沒有看到你在代碼中調用'#{bean.deleteQuestion(question)}'的位置。 –

回答

0

不過我只當我試圖得到EL錯誤#{bean.deleteQuestion(question)}

這是不幸的,你不同意關於「EL錯誤」和代碼的具體細節你的嘗試(在未來的問題中,你應該真的這麼做)。

我假設你試圖

<h:commandLink value="Delete" action="#{bean.deleteQuestion(question)}" /> 

而且它的實際上您的IDE不正確地顯示了一個警告/錯誤,你也懶得嘗試反正運行它。根據你的問題歷史記錄,你使用的是Glassfish 3,EL上的傳遞方法參數應該工作得很好。如果它確實是你在這條線上跳過的IDE,那麼就運行它吧。如果確實可以正常工作,請重新配置IDE的驗證設置或安裝更好的JSF/EL插件。

或者如果您在運行時確實得到了ELException,那麼它只能表示您的web.xml已聲明符合Servlet 2.5而不是Servlet 3.0。在EL中傳遞方法參數只支持自EL 2.2,它是JSP 2.2/Servlet 3.0的一部分。

請注意,命令鏈接應該有一個<h:form>父級。確保你有一個;你可以把它放在<h:commandLink><p:dataTable>。還要確保#{bean}正確保留questions表單提交請求。最簡單的就是把它放在視圖範圍內。