簡體   English   中英

更新JSF(AJAX)中的子組件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM