2014-05-06 46 views
1

保存操作後,我有以下Facelet代碼,並在<p:growl>組件上進行更新。 但我有以下異常,同時渲染頁面:「javax.servlet.ServletException:無法找到組件」<p:growl>組件?

javax.servlet.ServletException:無法找到表達式成分「:校長:顯示」從「的MainForm:Form1的:j_idt27」引用。

<ui:define id="principal" name="content"> 
    <p:growl id="display" showDetail="true" sticky="false" /> 

    <p:panel header="Gestion de projets"> 

     <h:form id="form1"> 
      <h:panelGrid columns="3"> 
       <h:outputText value="Nom du projet: *" /> 
       <p:inputText value="#{gestionProjetBean.nomProjet}" 
        required="true" label="Nom du projet" /> 
       <p:commandButton value="Save" 
        actionListener="#{gestionProjetBean.creerProjet(gestionProjetBean.nomProjet)}" 
        update=":principal:display" /> 
      </h:panelGrid> 
     </h:form> 
+0

它無法找到它的選擇器,看看你的xhtml輸出來找到直接ID - 嘗試只是做更新=「顯示」 – VeenarM

+0

@BalusC我已經看到那篇文章發佈我的問題之前,它幫助我辯護findComponent機制,但它並沒有幫助我找到我的問題的解決方案,因爲我無法找到我的組件的真實ID。 – Siho

+0

只需在瀏覽器中單擊右鍵並*查看源代碼* – BalusC

回答

1

我終於找到了解決辦法:應該update=":mainForm:display"

對於那些誰是面臨同樣的問題, 螢火蟲通過顯示頁面的源代碼並在其上搜索我的組件,幫助我找到組件的真實ID。

在那裏,我發現這一點:

<div id="mainForm:msgs" class="ui-messages ui-widget" aria-live="polite"></div> <span id="mainForm:display"></span> <script id="mainForm:display_s" type="text/javascript"> $(function(){PrimeFaces.cw('Growl','widget_mainForm_display',{id:'mainForm:display',sticky:false,life:6000,escape:true,msgs:[]});}); </script>

也不要忘記通過預先設置ID 「」(因爲每一個ID應與NamingContainer分隔符開始 「:」)

+0

巢形式是非法的。另一個答案沒有想到你是這麼做的。 – BalusC

+0

Ohhh謝謝@BalusC,我完全忘記了我正在使用模板 「true」id =「msgs」showDetail =「true」showSummary =「true」/> '。 好的,這就是mainForm id的來源......非常感謝,我認爲它是primefaces中的一個隱藏組件......現在更清楚了。但解決方案仍然有效。 – Siho

0

不使用:校長:顯示嘗試只:顯示

+0

已經嘗試過,它不起作用 – Siho

+0

你是什麼意思「它不工作」。任何錯誤或只是沒有功能? –

+0

我的意思是提出了同樣的例外 – Siho

0

嘗試此 得到ID到面板組件和修改代碼像下面

:panelid:display 

這對我有用。

+0

這是行不通的,因爲這個id是「display」在面板之外。但是,無論如何,我嘗試了(如預期的)它不起作用,並拋出了相同的異常 – Siho