在JSF

2012-07-19 32 views
0
動態添加新行

我有下面的代碼,允許用戶輸入一些數據:在JSF

<h:panelGrid columns="2" cellspacing="5"> 
    <h:outputLabel value="#{msg.FrequencyOfSpending}" /> 

    <h:selectOneMenu id="ruleFrequencyOptions" value="#{Rule.ruleControls.ControlOne.controlParams.Period.valueSelected}" styleClass="commonSelect"> 
     <f:selectItems value="#{Rule.ruleControls.ControlOne.controlParams.Period.validValues}" itemLabelEscaped="true" /> 
     <f:ajax event="valueChange" listener="#{Rule.ruleControls.ControlOne.controlParams.Period.valueSelectedChange}" onerror="handleAjaxError" render="rulesGroup" /> 
    </h:selectOneMenu> 
</h:panelGrid> 

<h:panelGroup id="rulesGroup"> 
    <a4j:repeat value="#{Rule.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[Rule.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> 

<!--******* 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:link value="#{msg.addControl}" /> 
</h:panelGrid> 

我需要添加一個鏈接,讓他們加入這個數據即不同的變化用戶點擊添加新的控制鏈接,並出現一個新行,允許他們輸入更多數據(具有完全相同的格式)。他們應該能夠添加多行相同的數據。

用JSF2和Richfaces4解決這個問題的最好方法是什麼? 我應該把我的panelGroups放在一個表中嗎?

感謝

+1

您可以使用一個數據表,在列表中添加新的空(NOT NULL)項目,並呈現DataTable,能夠更新新項目。 – 2012-07-19 14:09:34

回答

0

我用數據表的建議通過Luiggi:

<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> 


// my bean method 
public void addRule() 
{ 
    iRuleSet.get("RuleControl1").add(createRule());  
} 
+0

我想使用這個功能,但你的bean類內容不清楚,所以無法理解,你能否更新你的答案,這樣也會幫助其他人。 – 2015-12-19 10:51:18