@this的功能到底是什么?
|
据我所知,@this表示触发事件的当前组件,例如:
<p:commandButton process=\"@this\" ... />
在JSF 2 Ajax中,@this也可以表示封装组件,例如:
<h:inputText ...>
<f:ajax execute=\"@this\" ... />
</h:inputText>
我有一种情况,使用p:datatable,包括或排除@this会对Ajax部分提交产生不同的影响
这是示例,在这种情况下,该进程使用@this,并且按预期方式工作,在此过程中,首先发生进程,然后是setPropertyActionListener,最后是执行操作:
<p:column>
<p:commandLink
value=\"#{anggaranDetail.map[\'code\']}\"
process=\"@this infoAnggaranForm:Anggaran\"
update=\"detailDialogForm:Anggaran detailDialogForm:SubAnggaran\"
oncomplete=\"infoAnggaranDialog.hide()\"
image=\"ui-icon ui-icon-search\"
action=\"#{tInputBean.updateAnggaranSubAnggaran}\">
<f:setPropertyActionListener value=\"#{anggaranDetail}\"
target=\"#{infoAnggaranBean.selectedAnggaranDetail}\" />
</p:commandLink>
</p:column>
但是,当我在此示例中省略@this时,setPropertyActionListener和该操作将永远不会执行,就好像它们不存在一样。
我想知道为什么 ?也许@this除了当前组件之外还有其他含义,也许是本例中的当前记录?
我正在使用tomcat 7,这些是我的依赖项:
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.0.4-b09</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.0.4-b09</version>
<scope>compile</scope>
</dependency>
没有找到相关结果
已邀请:
1 个回复
诧不达
,当前形式,
默认为component9ѭ,当前形式。在命令链接/按钮中,这是执行与链接/按钮本身关联的动作所必需的。 但是,在数据表中,您有
,因此需要处理两个组件。如果省略“ 9”但保留其他组件,则它将仅处理/执行其他组件,而不处理链接/按钮组件。如果省略
属性,则默认为
。如果您还有更多其他相同形式的输入组件,那么它们也将被处理。 根据具体的功能要求,您可以将其保留为
,也可以将其省略。然后,JSF将完全按照您的意愿至少处理/执行按钮和其他组件。 也可以看看: 了解PrimeFaces流程/更新和JSF f:ajax执行/渲染属性