2015-02-11 76 views
2

我有一個名爲「SaveAndView」的commandLink。一旦我點擊這個鏈接,基本上將數據保存在當前頁面「a.xhtml」中,然後生成一個ID。然後將其重定向到頁面「b.xhtml?id = | generatedID |」查看數據。我如何將生成的ID傳遞給此commandLink?如何在執行操作後將參數傳遞給h:commandLink?

<h:commandLink action="#{mybean.save()}" 
       value="#{msg.saveAndView}" 
       target="_blank" includeViewParams="true"> 
    <f:param name="id" value="#{mybean.id}"/> 
</h:commandLink> 

因爲保存()沒有被調用還

+0

你的解釋不清楚,請提供'saveAndView()'實現,確切的問題是什麼,'saveAndView()'方法沒有被調用或者它是否被調用,但是你不能獲得'id'? ! – Tarik 2015-02-11 14:54:23

+1

你如何重定向?在目標頁面上使用''內部'',如''。 – Tiny 2015-02-11 14:57:31

+0

調用saveAndView()方法時沒有問題。問題在於調用saveAndView方法後設置了#{bean.id}值。當我的ID已經呈現時,如何更新帶有ID的鏈接 – TeFa 2015-02-11 14:58:57

回答

2

你似乎誤解基本工作流程的示例代碼以上生成空id參數。在你的情況如下:

  1. 用戶用一個持久化實體的數據填充表單;
  2. 用戶通過單擊命令鏈接提交表單;
  3. 執行操作方法,其中:
    • 新實體通過呼叫entityService.persist(entity);持續存在;
    • 在該方法執行後(即,其中執行的事務已被提交),分配了id的實體;
    • 您將此ID作爲查詢參數傳遞到您的操作方法的返回語句中,return "viewentity?id=" + entity.getId() + "&faces-redirect=true";將重定向到目標視圖(假設您有一個不需要編碼的數字ID,並且您不需要傳遞任何其他參數);
  4. 在目標頁面上使用<f:viewParam name="id" ... />接收id並使用它來顯示所需的數據。

因此,要直接回答您的問題,您需要手動在您的操作方法中傳遞生成的id

+0

我認爲你應該爲你的方法的return方法增加一個'「& includeViewParams = true」'。 – Tarik 2015-02-11 16:34:08

相關問題