2011-08-16 13 views
2

我使用facefaces jsf 2.0與primefaces 3.0.M2組件庫。 我正試圖實現動態數量的行,包括髮生數據表選擇時填充的iput字段。在ui中輸入綁定:在jsf中重複

每當作出選擇與輸入字段,但第一選擇用於正確以下選擇動態行計數的變化,但輸入字段並不更新後正確地產生的動態行和不斷表示從第1選擇輸入。

這是我如何在迭代的facelet列表;

<ui:repeat value="#{goalEntranceBean.selectedCard.parameterList}" var="prmBean" > 
     <li><h:outputText value="#{prmBean.lookUp.value}"/></li> 
     <li> 

      <h:outputText value="Weight:"/> 
      <p:inputText id="wx" required="true" value="#{prmBean.weight}"> 
      </p:inputText> 
      <h:outputText value="Percent:"/> 
      <p:inputText required="true" value="#{prmBean.percent}"> 
      </p:inputText> 
     </li> 

    </ui:repeat> 

我的bean,我得到卡的列表,並設置選定的卡與rowSelect事件在數據表中。

@ManagedBean(name = "goalEntranceBean") 
@ViewScoped 
public class GoalEntranceAction implements Serializable { 

private List<ScoreCard> personalCards = new ArrayList<ScoreCard>(); 

    private ScoreCard selectedCard = new ScoreCard(); 
...... 
} 

當我在調試模式檢查我可以看到真正的列表,但在屏幕上的元素不會改變。

回答

2

這是一個常見問題(每兩天會問)。長話短說,在ui裏輸入:重複不起作用,週期。

它與JSF,一個長期存在的,有名的一個問題。也許它會被修復。也許不是,似乎沒有人真正關心(我的意思是 - 一個輸入?在... ui:重複?這種瘋狂的場景!)。

一個快速的解決辦法是使用H:dataTable中,可能不敬虔用CSS濫用,以使它看起來像一個列表。一個長時間的解決方法是使用來自不同庫的一些迭代器。 Primefaces有一個可以呈現無序列表的元素。

1

可以使其工作,但解決方案是將輸入綁定到支持bean,並通過偵聽器(使用參數中接收的新值)更新支持bean中控件的值。顯然,如果你有一個複雜的表單,這不是一個好的解決方案,因爲你需要在頁面中的每個控件的後臺bean中添加一個監聽器/控件,但是如果你只有一個或兩個輸入,這是實用的。

2

感謝您的回覆。抱歉忘記分享解決方案。如上所述我有primefaces數據表。 在行選擇事件我呈現datatable,並希望更新該數據表的單元格。 使用p:inputtext很容易解決了我的問題。現在我可以更改屏幕上的數據,並且可以在屏幕上更新操作後看到這些值。我不明白原因,但它的工作原理。

<p:dataTable var="orgPrmBean" 
       value="#{scoreCardOperationsBean.selectedCard.orgParameterList}" 
       emptyMessage="#{labels.norecord}" 
       rowKey="#{orgPrmBean.id}" 
      > 

     <p:columnGroup type="header"> 
      <p:row> 
       <p:column headerText="Parameters" colspan="3" style="text-align:left;width:480;"/> 
      </p:row> 
     </p:columnGroup> 


     <p:column style="text-align:left;width:200px;"> 
      <h:outputText value="#{orgPrmBean.info}"/> 
     </p:column> 

     <p:column style="text-align:left;width:180px;"> 
      <p:inputText value="#{orgPrmBean.weight}" 
         rendered="#{scoreCardOperationsBean.selectedCard.goalEdit}"> 
       <f:convertNumber maxFractionDigits="0"/> 
      </p:inputText> 

     </p:column> 

    </p:dataTable>