2013-09-29 19 views
2

我與我顯示如下的步驟列表:更新/渲染<如何:用的forEach阿賈克斯

<ul > 
    <for:forEach id="steps" items="#{RecipeBean.recipe.steps}" var="step"> 
     <li> <com:Step description="#{step.stepDescription}"/></li> 
    </for:forEach> 
</ul> 
<p:commandButton id="addstep" value="#{msg['step.add']}" action="#{RecipeBean.addStep}" update="steps" /> 

按鈕addStep增加了一個步驟到RecipeBean.recipe.steps集合。現在應顯示新增加的步驟。但是,像這樣我得到了錯誤信息找不到帶有「j_idt8:addstep」引用的標識符「steps」的組件,這可能是for:forEach組件。

那麼有人知道我該如何解決這個問題?

+0

你爲什麼給了JSTL核心庫的'for',而不是'C'一個命名空間前綴:

然後,您可以按如下重構你的代碼? – BalusC

+0

@BalusC感謝您的建議。 – Briefkasten

回答

2

<p:commandButton>組件的update屬性應指向一個組件。由於<for:forEach>不是組件,而是標記處理程序,因此會收到錯誤消息。

我建議你看看現有的PrimeFaces組件,如DataList,它以無序格式呈現列表對象。

<p:dataList id="steps" items="#{RecipeBean.recipe.steps}" 
      var="step" itemType="disc"> 
    <com:Step description="#{step.stepDescription}" /> 
</p:dataList> 
<p:commandButton id="addstep" value="#{msg['step.add']}" 
       action="#{RecipeBean.addStep}" update="steps" /> 
+0

使用 」一個Stackoverflow異常。出於測試的原因,我在init()PostConstruct的RecipeBean中添加了配方屬性的一些步驟。 – Briefkasten