我有两个非常相似的用例,一个有效,另一个无效。我已经检查了其他答案中提到的基本内容(JBoss 7.1.1 上的 JSF2.1 和 PrimeFaces 3.3)。
首先是有效的样本:
<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);
在第二个示例中,传递给操作方法的任务始终为 NULL。如果我只是将任务的属性传递给方法,例如#{taskList.claimTask(v_task.id)}
(任务有一个返回字符串的 getId() 方法)并将操作方法签名更改为public String claimTask(String id)
......我传入的所有内容都是 NULL。
为什么在第一个样本中没有发生这种情况?在那里我传入了两个字符串,它工作正常......