[英]Update child component in JSF (AJAX)
我想要使用id =“ two”更新子組件。 一切正常,直到我將表單放在另一個組件中,例如h:panelGrid。
<h:panelGroup id="one">
<h:panelGroup id="two">
<h:outputText value="#{testBean.num}"/>
</h:panelGroup>
</h:panelGroup>
<br/>
<h:panelGrid columns="1">
<h:form>
<p:commandButton value="update"
action="#{testBean.inc()}"
update=":one:two"
ajax="true"
/>
</h:form>
</h:panelGrid>
在這種情況下,我得到:SF1073:在處理RENDER_RESPONSE 6期間捕獲到java.lang.IllegalArgumentException:UIComponent-ClientId =,Message = one
怎么了 ?
PS:update =“:one”是可行的,但我不想更新整個“一個”組件。
這是完整的代碼。
xhtml頁面:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:panelGroup id="one">
<h:panelGroup id="two">
<h:outputText value="#{testBean.num}"/>
</h:panelGroup>
</h:panelGroup>
<br/>
<h:panelGrid columns="1" id="table">
<h:form id="form">
<p:commandButton value="update"
action="#{testBean.inc()}"
update=":one:two"
ajax="true"
/>
</h:form>
<!-- .....another components .... -->
</h:panelGrid>
</h:body>
</html>
豆:
@Named
@ViewScoped
public class TestBean implements Serializable{
private int num;
public void inc() {
System.out.println("inc");
num++;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
這個非常無用的錯誤是由無效的update
語法引起的:one:two
首先嘗試將one
查找為NamingContainer
(請參見JSF 2.0中的Communications )。 如果找到了組件,但它不是NamingContainer
,它將引發您所看到的異常。
要解決此問題,只需指定正確的更新值:
<p:commandButton value="update" action="#{testBean.inc()}"
update=":two" ajax="true" />
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.