似乎无法从arraylist中删除对象项

时间:2015-04-21 12:43:27

标签: java arraylist primefaces

我无法从arraylist中删除某个项目。 我尝试的是粘贴在下面。似乎无法弄清楚下面的代码有什么问题。 xhtml是

<p:dataTable id="emaildt" styleClass="hide-column-names"
    style="width:70%" rowIndexVar="rowIndex"
    value="#{myBean.emailAddressList}" var="email">
    <p:column style="width:15%">
        <p:inputText id="email" value="#{email.email}"
        validatorMessage="Invalid email" onblur="TrimString(this)">
            <f:validateRegex
            pattern="^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$" />
            <p:ajax event="blur"  
                global="false" listener="#{myBean.checkEmailExist(email)}" />
        </p:inputText>
    </p:column>
    <p:column style="width:13%">
        <p:spacer width="10" rendered="#{myBean.emailAddressList.size()>'1'}"/>
        <p:commandLink  id="delete" immediate="true"
            actionListener="#{myBean.removeEmailFromList}"
            update="emaildt" process="emaildt"
            rendered="#{myBean.emailAddressList.size()>'1' &amp;&amp; false}">
                <h:graphicImage value="../images/button_remove.gif" />
                <f:param name="rowToRemove" value="#{rowIndex}" />
        </p:commandLink>

        <p:spacer width="5" rendered="#{rowIndex == myBean.emailAddressList.size()-1}"/>

        <p:commandLink id="addemailbtn" immediate="true"
            actionListener="#{myBean.addEmail}" 
            style="float:right;" update="emaildt" process="@this emaildt" 
            rendered="#{rowIndex == myBean.emailAddressList.size()-1}">

            <h:graphicImage value="../images/addbutton.jpg" />
        </p:commandLink>
    </p:column>
</p:dataTable>

使用字符串电子邮件及其getter和setter创建一个模型类EmailAddressModel。

MyBean代码是

List<emailAddressList> emailAddressList; //make its getters and setters
@PostConstruct
public void fillPage() {

    emailAddressList = new ArrayList<EmailAddressModel>();
    emailAddressList.add(new EmailAddressModel());

}

public void addEmail()  {
    try 
    {

        EmailAddressModel emailAddress = new EmailAddressModel();
        emailAddressList.add(emailAddress);
    }
    catch(IndexOutOfBoundsException I) {
        log.warn("FL Warning", I);

    }
}

public void removeEmailFromList() {
    String rowIndex = null;
    try {
        rowIndex = FacesContext.getCurrentInstance().getExternalContext()
                .getRequestParameterMap().get("rowToRemove");
        int index = Integer.parseInt(rowIndex);
        emailAddressList.remove(index);

    } catch (Exception e) {
        log.warn("FL Warning", e);
    }
}

问题是 - &gt;添加并输入第一行和第二行的值后,单击删除第一行,然后删除第二行。在调试时,第一行在后端arraylist中被删除,但在前端,第二行被删除。

希望以上信息有用。

2 个答案:

答案 0 :(得分:0)

检查传递给rowIndex的值,正如Spider所提到的Boris,Java是零索引的。

当第一项被索引为0时,你可能会返回一个1的rowIndex。

要测试,在try-catch块中,您可以使用:

 int index = Integer.parseInt(rowIndex) - 1;

答案 1 :(得分:0)

为解决方案添加了atrribute resetValues =&#34; true&#34; p:commandLink 。 谢谢大家帮助我.. :)