2011-08-16 23 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>