2012-08-31 3 views
0

두 개의 매우 유사한 사용 사례가 있습니다. 하나는 작동하고 다른 하나는 사용하지 않습니다. 다른 답변 (JBoss 7.1.1의 JSF2.1, PrimeFaces 3.3)에서 언급 한 기본 사항을 점검했습니다. 작동하지 않는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 빈의 범위는 무엇입니까?

가 @RequestScoped : 왜 여기, ViewScoped 또는 SessionScoped로 작업 목록 콩 범위를 변경하려고하는 것입니다 요청 Bean은 정확히 하나 개의 HTTP 요청/응답의 수명이 범위. commandLinks하여 데이터 테이블은 (HTTP 요청/응답이 끝난) 렌더링됩니다 일단 그래서 당신은 v_task에 대한 귀하의 행동 = "# {taskList.claimTask (v_task)}" 통화에서 매개 변수를 모든 참조를 잃게됩니다.

@ViewScoped : 뷰 범위가 지정된 bean은 동일한 JSF보기와 상호 작용하는 한 계속 유지됩니다. 렌더링이 끝난 후에도 @ViewScope 때문에 여전히 v_task 개체에 대한 참조가 있습니다.

+0

매우 감사합니다. @ViewScoped 완벽하게 작동합니다 :) – Joysn

관련 문제