2012-08-31 56 views
0

我有兩個非常相似的用例,一個可以工作,另一個不可用。我已經檢查了其他答案中提到的基本事情(使用PrimeFaces 3.3的JBoss 7.1.1上的JSF2.1)。不工作JSF2:並不總是調用commandLink操作方法

void deleteProcessInstance(String processInstanceId, String deleteReason); 

現在的樣本:

其作品首次樣本:

<h:form id="processInstanceList"> 
    <p:dataTable id="instances" var="processInstance" value="#{processInstanceList}"> 
    ... 
     <p:column> 
      <h:commandLink value="#{msg.deleteButtonLabel}" 
       action="#{runtimeService.deleteProcessInstance(processInstance.id, 'Cancelled by user')}"> 
     </h:commandLink> 

與行動方法簽名

<h:form id="taskGrouplist"> 
    <p:dataTable id="groupTasks" value="#{groupTaskList}" var="v_task"> 
    ... 
     <p:column> 
      <h:commandLink value="&Uuml;bernehmen" action="#{taskList.claimTask(v_task)}"/> 

與操作方法簽名:

@Named 
@RequestScoped 
public class TaskList { 
    public String claimTask(Task task); 

對於第二個示例,傳遞給操作方法的任務始終爲NULL。如果我只是將任務的屬性傳遞給方法,例如與#{taskList.claimTask(v_task.id)}(任務有一個getId()方法返回一個字符串),並更改動作方法簽名public String claimTask(String id) ...我傳入的所有內容都是NULL。

爲什麼在第一個樣本中不會發生這種情況?在那裏我通過兩個字符串,它工作正常...

回答

0

什麼是您的RuntimeService豆的範圍? 嘗試改變您的任務列表豆範圍ViewScoped或SessionScoped,這是爲什麼:

@RequestScoped:請求範圍的bean只能有一個HTTP請求/響應的一生。 所以一旦有commandLinks您的dataTable被渲染(HTTP請求/響應結束)你失去所有引用的v_task在行動=「#{taskList.claimTask(v_task)}」電話參數。

@ViewScoped:只要您與相同的JSF視圖交互,視圖範圍的bean就會存活。 即使渲染結束後,由於@ViewScope,您仍然可以在v_task對象上引用它。

+0

非常感謝你。 @ViewScoped完美的作品:) – Joysn

相關問題