2011-05-10 67 views
4

當彈出窗口(pp1)中的保存按鈕被點擊時,項目列表被更新。 但是當按下項目列表中的更新按鈕時,呈現ID:form1:pp1不存在錯誤,當它被呈現時。如果渲染=「@所有」它的作品,但它不好。 (錯誤:<f:ajax>包含未知的ID ':Form1中:PP1')jsf 2.0 f:未找到ajax渲染ID

<h:form id="form1" prependid=false> 
<h:panelGroup id="projects"> 
<ui:repeat var="action" value="#{dadadada}" varStatus="status"> 
<h:commandButton value="Save"> 
//gives id not found error 
<f:ajax event="click" execute="@form" render=":form1:pp1" listener="#{fsfsfsfsfs}" /> 
</h:commandButton> 
</ui:repeat> 

</h:panelGroup> // project panel group 

//popup 
<h:panelGroup id="pp1"> 
<div id="popup2" class="popup_block"> 

//save button in the popup 
<div class="popupBody_save2"> 
      <h:commandButton image="resources/images/saveBtn.gif" value="Save"> 
      <f:ajax event="click" execute="@form" render="projects" listener="#{dfsfssfs}" /> 
      </h:commandButton> 
     </div> 

</div> 
</h:panelGroup> 

</h:form> 

回答

0

如果使用prependId=false你panelGroup中的ID是pp1而不是form1:pp1。 (假設您的屬性中存在拼寫錯誤「prependID」而不是「prependid」)

+0

亞,它的一個錯字..我試過這種方式也..但沒有運氣 – Amilask 2011-05-10 10:51:57

+0

看在生成的html源代碼,並試圖找出什麼是你的panelGroup的真實ID。 – 2011-05-10 11:00:23

+0

其pp1,我試着渲染=「:pp1」,但結果相同 – Amilask 2011-05-10 11:02:42

6

由於表單上有prependId="false",因此:form1:pp1將不起作用。 pp1將不起作用,因爲它然後查找與<ui:repeat>相同範圍內的組件,該組件本身就是UINamingContainer組件。

在webbrowser中打開JSF頁面,右鍵單擊並選擇查看源代碼以獲取生成的HTML。找到由<h:panelGroup id="pp1">生成的HTML元素。它應該是這個樣子

<span id="foo:bar:pp1"> 

您需要使用正是這個ID與:前綴在render屬性。

<f:ajax render=":foo:bar:pp1"> 

如果有一個自動生成的ID部分,如j_id0,那麼你需要給有問題的父組件的固定ID。

+0

prependId = false,它顯示爲我應該能夠訪問使用render =「:pp1」isn是嗎?但id仍然找不到該元素 – Amilask 2011-05-11 05:09:32