非常によく似たユースケースが 2 つあります。1 つは機能し、もう 1 つは機能しません。他の回答で言及されている基本的なことを確認しました(PrimeFaces 3.3を使用したJBoss 7.1.1のJSF2.1)。
最初に動作するサンプル:
<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>
アクション メソッドのシグネチャを使用:
void deleteProcessInstance(String processInstanceId, String deleteReason);
そして今、動作しないサンプル:
<h:form id="taskGrouplist">
<p:dataTable id="groupTasks" value="#{groupTaskList}" var="v_task">
...
<p:column>
<h:commandLink value="Übernehmen" action="#{taskList.claimTask(v_task)}"/>
アクション メソッドのシグネチャを使用:
@Named
@RequestScoped
public class TaskList {
public String claimTask(Task task);
2 番目のサンプルでは、アクション メソッドに渡されるタスクは常に NULL です。タスクの属性をメソッドに渡すだけの場合、たとえば#{taskList.claimTask(v_task.id)}
(Task には文字列を返す getId() メソッドがあります)、アクション メソッドのシグネチャをpublic String claimTask(String id)
... に変更すると、渡すものはすべて NULL になります。
最初のサンプルでこれが起こらないのはなぜですか? そこで 2 つの文字列を渡すと、正常に動作します...