2017-02-16 21 views
-1

Я пытаюсь добавить h: inputText и selectOneMenu динамически в jsf2. И я добился успеха в этом. Теперь новая проблема заключается в том, что когда я нажал кнопку «Добавить новую», ранее динамически добавленное значение h: inputText стирается. И я не хочу, чтобы это произошло. Мой код ниже. Пожалуйста помоги. :)Как добавить h: inputText динамически в jsf без потери ранее динамически добавленного значения h: inputText?

<h:form> 
           <h:dataTable id="bankAccountDataTable" value="#{kycBeanJSF.kycDataModelJSF.kycdto.bankAccountInfoDTOs}" var="item" binding="#{kycBeanJSF.htmlDataTable}"> 

            <h:column> 
             <label class="label-control"><p:outputLabel value="आबेदकको बैंक खाता नम्बर:"/><span class="required">*</span></label> 
             <h:inputText value="#{item.bankAccountNumber}"/> 
            </h:column> 
            <h:column> 
             <h:selectOneRadio id="radio1" value="#{item.bankAccountType}" layout="lineDirection" > 
              <f:selectItem itemLabel="चल्ती खाता" itemValue="chalti" /> 
              <f:selectItem itemLabel="बचत खाता" itemValue="bachat" /> 
              <f:selectItem itemLabel="कॉल खाता" itemValue="call" /> 
             </h:selectOneRadio> 
            </h:column> 
            <h:column> 
             <h:commandButton value="Remove" action="#{kycBeanJSF.kycWebCoreBean.remove(item)}" immediate="true"/> 
            </h:column> 

           </h:dataTable> 
           <h:commandButton value="Add New" action="#{kycBeanJSF.kycWebCoreBean.addNew()}" immediate="true"/> 
          </h:form> 

My KycBeanJSF находится в области запроса. KycDataModelJSF находится в SessionScope.

KycBeanJSF.java 

public class KycBeanJSF { 
@ManagedProperty(value = "#{kycDataModelJSF}") 
private KycDataModelJSF kycDataModelJSF; 
private KycWebCoreBean kycWebCoreBean; 


@PostConstruct 
public void initWebCore(){ 
    kycWebCoreBean = new KycWebCoreBean(); 
} 

//getters and setters 
} 

KycDataModelJSF.java

@ManagedBean(name = "kycDataModelJSF") 
@SessionScoped 
public class KycDataModelJSF { 

private KYCDTO kycdto; 

@PostConstruct 
public void init(){ 
    addNew(); 
} 

public KYCDTO getKycdto() { 
    if (kycdto == null) { 
     kycdto = new KYCDTO(); 
    } 
    return kycdto; 
} 

public void setKycdto(KYCDTO kycdto) { 
    this.kycdto = kycdto; 
} 
public void addNew() { 
    if(getKycdto().getBankAccountInfoDTOs().size()<3){ 
    getKycdto().getBankAccountInfoDTOs().add(new BankAccountInfoDTO()); 
    } 
    else if(getKycdto().getBankAccountInfoDTOs().size()>=3){ 
     FacesUtil.setErrorFacesMessage("Sorry, cannot add more than three accounts."); 
    } 

} 
} 

KycWebCoreBean.java

public class KycWebCoreBean { 

private KycDataModelJSF kycDataModelJSF; 



public KycWebCoreBean() { 
    kycDataModelJSF = (KycDataModelJSF) Util.getSessionObject("kycDataModelJSF"); 
    kycDependencyInjection = (KycDependencyInjection) Util.getSessionObject("kycDependencyInjection"); 
    applicantRegisterDataModelJSF = (ApplicantRegisterDataModelJSF) Util.getSessionObject("applicantRegisterDataModelJSF"); 
} 

    public void addNew() { 
    if(kycDataModelJSF.getKycdto().getBankAccountInfoDTOs().size()<3){ 
    kycDataModelJSF.getKycdto().getBankAccountInfoDTOs().add(new BankAccountInfoDTO()); 
    } 
    else if(kycDataModelJSF.getKycdto().getBankAccountInfoDTOs().size()>=3){ 
     FacesUtil.setErrorFacesMessage("Sorry, cannot add more than three accounts."); 
    } 
} 

public void remove(BankAccountInfoDTO b) { 
    kycDataModelJSF.getKycdto().getBankAccountInfoDTOs().remove(b); 
} 
} 

Я предоставлю дополнительную информацию, если это необходимо. Спасибо заранее.

+0

Использование Ajax для отправки значения существующих входов на сервер, когда они вошли .... – Kukeltje

ответ

1

Как h: inputText может хранить только одно значение, я предполагаю, что вы хотите добавить новое значение в старое. Если да, то чем в бина, которая управляет, что свойство в инкубационном методе используют

public void setValue(String value) { 
     this.value = this.value + " " + value; 
    } 

вместо обычного

public void setValue(String value) { 
     this.value = value; 
    } 

С строки «моя строка» в час: inputText после изменения значения результата на «другую строку» это «моя строка другая строка»

+0

нет друг, я не пытаюсь добавить новое значение старого. Я пытаюсь динамически добавлять h: inputText и сохранять эти значения в базе данных. Я могу сохранить их в базе данных, когда я нажимаю кнопку «Отправить». Проблема в том, что когда я добавляю новый h: inputText, ранее добавленное h: значение inputText исчезает, – Paawn12

0
<h:dataTable id="bankAccountDataTable" value="#{kycBeanJSF.kycDataModelJSF.kycdto.bankAccountInfoDTOs}" var="item"> 
           <h:column> 
            <label class="label-control"><p:outputLabel value="आबेदकको बैंक खाता नम्बर:"/><span class="required">*</span></label> 
            <h:inputText value="#{item.bankAccountNumber}"/> 
           </h:column> 
           <h:column> 
            <h:selectOneRadio id="radio1" value="#{item.bankAccountType}" layout="lineDirection"> 
             <f:selectItem itemLabel="चल्ती खाता" itemValue="chalti" /> 
             <f:selectItem itemLabel="बचत खाता" itemValue="bachat" /> 
             <f:selectItem itemLabel="कॉल खाता" itemValue="call" /> 
            </h:selectOneRadio> 
           </h:column> 
           <h:column> 
            <h:commandButton value="Remove" actionListener="#{kycBeanJSF.kycWebCoreBean.remove(item)}"> 
             <f:ajax render="@form"/> 
            </h:commandButton> 
           </h:column> 

          </h:dataTable> 
          <h:commandButton value="Add New" actionListener="#{kycBeanJSF.kycWebCoreBean.addNew()}"> 
          <f:ajax execute="bankAccountDataTable" render="bankAccountDataTable msg"/> 
          </h:commandButton>