如何在JSF中动态添加H:输入文本而不会丢失先前动态添加的H:InputText值



我正在尝试在JSF2中动态添加H:InputText和SelectOneMenu。我在这方面取得了成功。现在,新的问题是,当我单击"添加新"按钮时,先前动态添加的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>

我的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);
}
 }

如果需要,我将提供更多信息。预先感谢。

作为h:inputText只能存储一个值,我假设您想将新值附加到旧值。如果是这样,比在bean中管理该属性的setter方法

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

而不是通常的

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

使用字符串"我的字符串"中的h:inputText在"另一个字符串"结果更改为"我的字符串"

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

最新更新