【问题标题】:how to add multiple textbox by clicking add button in jsf如何通过单击jsf中的添加按钮来添加多个文本框
【发布时间】:2014-09-16 10:59:19
【问题描述】:

我在 jsf primefaces 页面中添加新文本字段时遇到问题。 plz,任何人都可以帮我怎么做...主要问题是当我单击添加按钮时,整个页面都可以刷新,但是前一个文本框会自动删除并在前一个文本框上创建一个新文本框。但我需要两者..例如,当我们在 gmail 中附加文件时,会显示我们附加的所有文件。我正在附上我需要的图片..

**.xhtml**
  <h:form >

        <h:panelGrid border="0" columns="3" cellpadding="4" columnClasses="control-label">

            <h:outputText value="Individual Email"/>
            <div>   
            <h:dataTable value="#{utilBean.addresses}" var="rec" binding="#{utilBean.data}"        id="addresses">
                <h:column>
                    <h:inputText id="address" value="#{rec.emailAddress}" binding="#{utilBean.address}"/>
                </h:column>
                <h:column>
                    <h:commandButton id="delete" value="Delete" immediate="true" actionListener="#{utilBean.deleteAddress}"/>
                </h:column>
            </h:dataTable>

            <h:commandButton id="add" value="Add Email Address" immediate="true"   actionListener="#{utilBean.addAddress}" />
            </div>
            <br/>

      </h:panelGrid>

</h:form>                   

**utilBean.java**

 import java.util.ArrayList;
 import java.util.List;

 import javax.faces.bean.ManagedBean;
 import javax.faces.component.UIData;
 import javax.faces.component.UIInput;
 import javax.faces.context.FacesContext;
 import javax.faces.event.ActionEvent;

 @ManagedBean
 public class UtilBean{

 private UIData data=null;
 private UIInput address = null;

    private List<Address> addresses = new ArrayList<Address>();

  public void addAddress(ActionEvent event){

    addresses.add(new Address()); //add new textbox
    this.updateAddresses();
    FacesContext.getCurrentInstance().renderResponse();
    System.out.println("adress size:" + addresses.size());
  }

 public void deleteAddress(ActionEvent event){
    int index = data.getRowIndex();     
    this.updateAddresses();
    this.getAddresses().remove(index);
    FacesContext.getCurrentInstance().renderResponse();
 }

 public void updateAddresses(){ 
    List<Address> list = (ArrayList<Address>)data.getValue();
    for(int i =0;i<data.getRowCount();i++){
        data.setRowIndex(i);
        list.get(i).setEmailAddress((String)getAddress().getSubmittedValue() );
    }
    data.setRowIndex(0);
     }


  //Getters and Setters metod

   public UIData getData() {
    return data;
    }

  public void setData(UIData data) {
    this.data = data;
  }

  public UIInput getAddress() {
    return address;
  }

  public void setAddress(UIInput address) {
    this.address = address;
  }

  public List<Address> getAddresses() {
    return addresses;
  }

  public void setAddresses(List<Address> addresses) {
    this.addresses = addresses;
  }

}

 **Address.java**

 import java.io.Serializable;

import javax.faces.bean.ManagedBean;

@ManagedBean
public class Address implements Serializable {

private static final long serialVersionUID = 1L;

private String emailAddress;

//setter and getter method


 }

请任何人指出我哪里有错误。

【问题讨论】:

    标签: spring jsf primefaces


    【解决方案1】:

    您必须在绑定到 p:datatable 的列表中添加新地址,并且只需更新 p:datatable。它会起作用的。

    <h:commandButton id="add" value="Add Email Address" immediate="true"   actionListener="#{utilBean.addAddress}" update="addresses"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多