@this 的功能到底是啥?
Posted
技术标签:
【中文标题】@this 的功能到底是啥?【英文标题】:What is the function of @this exactly?@this 的功能到底是什么? 【发布时间】:2011-08-07 15:09:17 【问题描述】:据我所知 @this 是表示当前触发事件的组件,例如:
<p:commandButton process="@this" ... />
在 JSF 2 Ajax 中,@this 也可以表示封装组件,例如:
<h:inputText ...>
<f:ajax execute="@this" ... />
</h:inputText>
我有一种情况,使用 p:datatable,包括或排除 @this 会对 Ajax 部分提交产生不同的影响
这是示例,在这种情况下,进程正在使用 @this,这按预期工作,其中进程首先发生,然后是 setPropertyActionListener 和最后,action 被执行:
<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 和 action 永远不会被执行,就好像它们没有在那里。
我想知道为什么?或许@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】:PrimeFaces process
和标准 JSF execute
属性应指向 JSF 应在整个 JSF 生命周期内根据 ajax 请求(获取请求参数、验证它们、更新模型、执行操作)处理的组件的空格分隔组件标识符. process
默认为@form
,当前表单,execute
默认为@this
,当前组件。在命令链接/按钮中,这是执行与链接/按钮本身相关的操作所必需的。
但是,在您的数据表中,您有 process="@this infoAnggaranForm:Anggaran"
,因此需要处理两个组件。如果您省略@this
但保留其他组件,则它只会处理/执行其他组件,而不是链接/按钮组件。如果您省略 process
属性,它将默认为 @form
。如果您在同一个表单中有更多其他输入组件,那么它们也会被处理。
根据具体的功能需求,可以保留process="@this infoAnggaranForm:Anggaran"
,也可以省略。然后,JSF 将至少按照您的需要处理/执行按钮和其他组件。
另见:
Understanding PrimeFaces process/update and JSF f:ajax execute/render attributes【讨论】:
在命令链接/按钮中,这是执行与链接/按钮本身相关的操作所必需的。 process 属性,我认为根据我的测试它默认为@all。正如你已经说过的,execute 默认为@this。再次感谢 BalusC!以上是关于@this 的功能到底是啥?的主要内容,如果未能解决你的问题,请参考以下文章