Я не могу удалить элемент из массива. То, что я пробовал, вставлено ниже. Невозможно понять, что не так в нижнем коде. являетсяНе удается удалить объект из архаиста
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][email protected]((\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' && 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>
Создать модель класса 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);
}
}
Проблема есть -> после того, как мы добавим и ввести значения в первом и втором удалить, нажмите на удаление из первой строки, то вторая строка будет удален. При отладке первая строка удаляется в backend arraylist, но в конце, вторая строка удаляется.
Надеюсь, что приведенная выше информация полезна.
Массивы в Java нулевые индексируются. Это звучит как ваша проблема. –
@BoristheSpider: код использует arraylist. как объясняется в вопросе, когда я нажимаю на удаление первой строки, индекс строки, полученный в конце, сам равен нулю, т. е. удаляет объект с нулевым индексом. и удаляет правильную строку из arraylist. –
какая строка удалена в бэкэнд и интерфейсе, если вы нажмете 4-ю строку? – Kukeltje