@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 时,setPropertyActionListeneraction 永远不会被执行,就好像它们没有在那里。

我想知道为什么?或许@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 的功能到底是啥?的主要内容,如果未能解决你的问题,请参考以下文章

iPhone的“跳板”视图到底是啥?

PDA手机到底是啥意思??

“此功能将融合”是啥意思?

现在大家都在说的云原生到底是啥?

Javascript中的Prototype到底是啥

在tp5框架中$this->request->get('id', 100);是啥功能?