表单 – 为什么要显式地将process =“@ this”添加到p:commandButton以调用操作?

我知道我们需要显式地添加process =“@ this”以获取调用p:commandbutton动作,并且我也知道processface属性默认为@face.

由于进程默认为@form,因此该按钮也不会与表单中的其他元素一起处理,并且应该调用其操作.

任何人都可以解释这背后的确切原因吗?

解决方法

Process @form表示commandLink / Button的当前形式
进程@这意味着commandLink / Button的当前组件.检查以下代码.

process.xhtml

<h:form id="form1">
    <h:inputText value="#{ProcessBean.id}" id="id"/><br/>
    <h:panelGroup id="panel_1">
        <h:inputText value="#{ProcessBean.name}" id="name"/><br/>
    </h:panelGroup>
    <h:panelGroup id="panel_2">
        <h:inputText value="#{ProcessBean.address}"/>
        <br/>
        <p:commandButton process="@form" value="Btm1" id="button1" action="#{ProcessBean.show}"/><!-- Default -->
        <p:commandButton process="@this" value="Btm2" id="button2" action="#{ProcessBean.show}"/>
        <p:commandButton process="@this form1:panel_1" value="Btm3" id="button3" action="#{ProcessBean.show}"/>
    </h:panelGroup>
</h:form>

ProcessBean.java

@ManagedBean(name = "ProcessBean")
public class ProcessBean {
    private String id;
    private String name;
    private String address;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }

    public void show() {
        System.out.println(id);
        System.out.println(name);
        System.out.println(address);
    }
}

让我们的用户输入输入框

001     -> id
Jone    -> name
London  -> address

单击button1,将完成整个表单的所有JSF组件(例如:id,name,address).输出将是:

001
Jone
London

单击button2,该过程将是其自身(例如:button2).没有id,名称,地址的进程.输出将是:

null
null
null

单击button3,所有JSF组件(例如:name)整个panel_1和button3将被处理.输出将是:

null
Jone
null

调用你的动作方法调用之前可能存在验证或转换失败.

相关文章

操作步骤 1、进入elasticsearch的plugin,进入ik。进入config。 2、在config下面建立以.dic为后缀的字典...
lengend data数据中若存在&#39;&#39;,则表示换行,用&#39;&#39;切割。
代码实现 option = { backgroundColor: &amp;#39;#080b30&amp;#39;, tooltip: { trigger: &...
问题原因 原因在于直接在js中取的变量并复制给var变量。 于是就变成这样。 解决办法 var data = &#...
前言 最近做了一个调查问卷导出的功能,需求是将维护的题目,答案,导出成word,参考了几种方案之后,选...
对于很多人来说,用字符编码都是熟能生巧,而不清楚为什么是那样的字符编码,所以我在这列了一个表,翻...