Sri*_*nji 11 forms jsf primefaces commandbutton
我知道我们需要显式添加process="@this"以获取p:commandbutton调用的操作,并且我也知道process属性默认为@formprimefaces.
由于进程是默认的,@form因此按钮也不会与表单中的其他元素一起处理,并且应该调用其操作.
任何人都可以解释这背后的确切原因吗?
Zaw*_* oo 35
过程@form的意思是当前形式commandLink/Button
过程@this意味着的电流分量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>
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
让我们的用户输入输入框
001 -> id
Jone -> name
London -> address
Run Code Online (Sandbox Code Playgroud)
单击button1,JSF component(Eg : id, name, address)整个表单将被处理.输出将是:
001
Jone
London
Run Code Online (Sandbox Code Playgroud)
单击button2,该过程将是其自身(例如:button2).没有流程id, name, address.输出将是:
null
null
null
Run Code Online (Sandbox Code Playgroud)
点击button3,JSF component(Eg : name) 整个过程panel_1,button3并将进行处理.输出将是:
null
Jone
null
Run Code Online (Sandbox Code Playgroud)
不调用你的动作方法?调用之前可能存在验证或转换失败.