我在保存/更新表中的行時遇到問題。
JSF2 h:dataTable動態生成的行不綁定到後臺bean
我有一個方法myBean.addRule動態添加新行到表中。
這似乎工作正常....我點擊它,一個新的行出現在界面輸入新的數據。
但是,當我保存myBean.saveRules似乎出現問題。
看起來只有最近添加的行正在綁定到我的支持bean並進行更新。
例如,如果我有3行數據:
- 刪除行1中的某些文本並點擊保存按鈕,此更新不會被保存。
- 如果我在第3行更改文本,則會保存此更改(最近添加的行)。
我是否在我的任何組件上缺少一些綁定屬性來解決此問題?
<a4j:repeat value="#{myBean.ruleSet}" var="rule" id="ruleIterator">
<h:dataTable value="#{rule}" var="currentRuleItem">
<h:column>
<h:panelGrid columns="2" cellspacing="5">
<h:outputLabel value="#{msg.FrequencyOfSpending}" />
<h:selectOneMenu id="ruleFrequencyOptions" value="#{currentRuleItem.ruleControls.ControlOne.controlParams.Period.valueSelected}" styleClass="commonSelect">
<f:selectItems value="#{currentRuleItem.ruleControls.ControlOne.controlParams.Period.validValues}" itemLabelEscaped="true" />
<f:ajax event="valueChange" listener="#{currentRuleItem.ruleControls.ControlOne.controlParams.Period.valueSelectedChange}" onerror="handleAjaxError" render="rulesGroup" />
</h:selectOneMenu>
</h:panelGrid>
<h:panelGroup id="rulesGroup">
<a4j:repeat value="#{currentRuleItem.ruleParams.Action.properties}" var="RuleParamProperty" id="budgetRuleIterator">
<h:panelGrid columns="4" cellspacing="5" columnClasses="ruleParamCheckbox, ruleParamAction, ruleParamActionFrequency, ruleParamActionInput">
<h:selectBooleanCheckbox value="#{RuleParamProperty.selected}" immediate="true">
<a4j:ajax event="click" listener="#{RuleParamProperty.selectedChange}" onerror="handleAjaxError" />
</h:selectBooleanCheckbox>
<h:outputText value="#{msg[RuleParamProperty.name]}" />
<h:panelGrid columns="3">
<h:outputText value="#{msg.Action_1}" />
<h:outputText value="#{msg[currentRuleItem.ruleControls.ControlOne.controlParams.Period.valueSelected]}" class="italic-text" />
<h:outputText value="#{msg.Action_3}" />
</h:panelGrid>
<h:inputText value="#{RuleParamProperty.inputValue}" />
</h:panelGrid>
</a4j:repeat>
</h:panelGroup>
</h:column>
</h:dataTable>
<!--******* Link here to generate row with exact same format as all code above ***-->
<h:panelGrid columns="2">
<img id="AddIcon" src="#{facesContext.externalContext.requestContextPath}/images/icons/add.png" alt="#{msg.addControl}" />
<h:commandLink value="#{msg.addControl}" action="#{myBean.addRule}" />
</h:panelGrid>
</a4j:repeat>
<h:panelGrid columns="2" cellspacing="5">
<h:commandButton value="#{msg.sc_cancel}" immediate="true" action="#{myBean.cancel}" />
<h:commandButton value="#{msg.ua_save}" action="#{myBean.saveRules}" />
</h:panelGrid>
// my bean method
public void addRule()
{
iRuleSet.get("RuleControl1").add(createRule());
}
我還沒有包括我支持bean代碼,這是非常複雜的,如果需要的話我可以編輯和節目片段。
在此先感謝