如何在 jsf 中动态添加 h:inputText 而不会丢失之前动态添加的 h:inputText 值? [复制]
Posted
技术标签:
【中文标题】如何在 jsf 中动态添加 h:inputText 而不会丢失之前动态添加的 h:inputText 值? [复制]【英文标题】:How to add h:inputText dynamically in jsf without losing previously dynamically added h:inputText value? [duplicate] 【发布时间】:2017-07-05 13:51:30 【问题描述】:我正在尝试在 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);
如果需要,我会提供更多信息。 提前致谢。
【问题讨论】:
使用 ajax 将现有输入的值在输入时发送到服务器...... 【参考方案1】:由于 h:inputText 只能存储一个值,我假设您想将新值附加到旧值。如果是这样,那么在 setter 方法中管理该属性的 bean 中使用
public void setValue(String value)
this.value = this.value + " " + value;
而不是平常
public void setValue(String value)
this.value = value;
将值更改为“另一个字符串”后在 h:inputText 中使用字符串“我的字符串”,结果是“我的字符串另一个字符串”
【讨论】:
没有朋友,我不是想将新值附加到旧值。我正在尝试动态添加 h:inputText 并将这些值存储在数据库中。单击提交按钮时,我可以将它们存储在数据库中。问题是,当我添加新的 h:inputText 时,之前添加的 h:inputText 值消失了,【参考方案2】: <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>
【讨论】:
以上是关于如何在 jsf 中动态添加 h:inputText 而不会丢失之前动态添加的 h:inputText 值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JSF 中构建“编辑”按钮并在 h:outputText 和 h:inputText 之间切换