我有以下的Primefaces 3.5页面,我在其中定义了两个命令link。我的问题是,lockout
的动作没有被触发(用断点检查),尽管lockoutTest
具有相同的设置工作。oncomplete
工作在两个commandLink没有抛出异常。
<p:dataTable id="calendar" value="#{calendarView.calendarData.entrySet().toArray()}" var="row">
<f:facet name="header">
<p:panelGrid>
<p:row>
<p:column>
<p:commandLink id="lockoutTest"
value="test lockout"
update=":mainForm:lockoutEditorDialog"
process="@this"
action="#{calendarView.editLockout(15,15)}"
oncomplete="lockoutDialogWidget.show()">
<f:attribute name="title" value="valami" escape="true" />
</p:commandLink>
</p:column>
</p:row>
</p:panelGrid>
</f:facet>
<p:column style="width: 50px; text-align: right">
<f:facet name="header">
<h:outputText value="#{msgs.calendar_room}" />
</f:facet>
<h:outputText value="#{row.key.roomNumber}" />
</p:column>
<p:columns value="#{calendarView.columns}" var="column" style="text-align: center; #{not empty row.value[column].color ? 'background-color:#'.concat(row.value[column].color):''}">
<f:facet name="header">
<h:outputText value="#{column}" />
</f:facet>
<p:commandLink id="lockout"
value="#{row.value[column].text}"
update=":mainForm:lockoutEditorDialog"
process="@this"
action="#{calendarView.editLockout(row.key.roomNumber,column)}"
oncomplete="lockoutDialogWidget.show()"
rendered="#{row.value[column].text == 'K'}">
<f:attribute name="title" value="#{row.value[column].label}" escape="true" />
</p:commandLink>
</p:columns>
</p:dataTable>
更新:我已经将p:columns
更改为简单的p:column
进行测试,它可以工作:
<p:column id="testcolumn">
<p:commandLink id="lockouttest"
value="T"
update=":mainForm:lockoutEditorDialog"
process="@this"
action="#{calendarView.editLockout(15,15)}"
oncomplete="lockoutDialogWidget.show()"
>
</p:commandLink>
</p:column>
当你想在后台bean中调用一个方法时,使用actionListener
而不是action
。
另外,确保你的p:commandLink
被放置在h:form
(我假设你已经在这里提交了它,因为它应该是你的p:datatable
的父)