Как удалить коллекцию элементов, используя текущий контекст JPA, JSF, Java Collections - PullRequest
0 голосов
/ 24 февраля 2011

Я хочу удалить комментарий, который не соответствует текущему фильму;

info

         jpaController = (CommentFacade) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "commentJpa");
         movieController = (MovieController) facesContext.getApplication().evaluateExpressionGet(facesContext, "#{movie}", MovieController.class);
         private List<Comment> userCommentItems = null;
         private Comment userComment = null;

 public List<Comment> getUserCommentItems() {
    if (userCommentItems == null) {
        getUserPagingInfo();
        Vector comments = (Vector) jpaController.findAll();
        Vector v = new Vector(comments);
        for (Iterator iterator = comments.listIterator(); iterator.hasNext();){
                userComments = (Comment) iterator.next();
                if (userComments.getMovie().getIdMovie() != movieController.getMovie().getIdMovie()){
                    v.remove(userComments);
                }
            }
        userCommntItems = v;
    }
    return userCommentItems ;
}


  <h:panelGroup>
       <h:outputText value="Item #{comment.userPagingInfo.firstItem +  1}..#{comment.userPagingInfo.lastItem} of #{comment.userPagingInfo.itemCount}"/>&nbsp;
      <h:commandLink action="#{comment.userPrev}" value="Previous #{comment.userPagingInfo.batchSize}" 
    rendered="#{comment.userPagingInfo.firstItem >= comment.userPagingInfo.batchSize}"/>
     <h:commandLink action="#{comment.userNext}" value="Next #{comment.userPagingInfo.batchSize}" rendered="#{comment.userPagingInfo.lastItem +  comment.userPagingInfo.batchSize <= comment.userPagingInfo.itemCount}"/>&nbsp;
     <h:commandLink action="#{comment.userNext}" value="Remaining #{comment.userPagingInfo.itemCount - comment.userPagingInfo.lastItem}"
                          rendered="#{comment.userPagingInfo.lastItem < comment.userPagingInfo.itemCount && comment.userPagingInfo.lastItem + comment.userPagingInfo.batchSize > comment.userPagingInfo.itemCount}"/>

    <h:dataTable value="#{comment.userCommentItems}" var="item"
             border="0" cellpadding="2" cellspacing="0" rowClasses="jsfcrud_odd_row,jsfcrud_even_row" rules="all" style="border:solid 1px"
             rendered="#{not empty comment.movieController.movie.commentCollection}">

    <h:column>
        <f:facet name="header">
            <h:outputText value="IdUser"/>
        </f:facet>
        <h:outputText value="#{item.idUser.user}"/>
    </h:column>
    <h:column>
        <f:facet name="header">
            <h:outputText value="Text"/>
        </f:facet>
        <h:outputText value="#{item.text}"/>
    </h:column>
</h:dataTable>
</h:panelGroup>

1 Ответ

2 голосов
/ 24 февраля 2011

Прежде всего, это ужасный код.Как насчет этой версии?

public List<Comment> getUserCommentItems() {
    if (userCommentItems == null) {
        getUserPagingInfo();
        List<Comment> comments = jpaController.findAll();
        for (Iterator<Comment> iterator = comments.iterator(); iterator.hasNext();){
                userComments = iterator.next();
                if (!userComments.getMovie().equals(movieController.getMovie()){
                    iterator.remove();
                }
            }
        userCommntItems = comments;
    }
    return userCommentItems ;
}

Улучшения:

  • Больше не используется устаревший класс Vector (особенно больше нет ненужных приведений)
  • Сравните объект, используя equals(), а не == (вы должны реализовать Movie.equals(Object) соответственно).
  • Нет необходимости копировать коллекцию, работайте над оригиналом (если ваш DAO возвращает что-то, что я не могу изменитьтогда это отстой)

Но чтобы действительно решить вашу проблему:

Вы повторно используете этот компонент для различных фильмов?Если это так, хранить комментарии в поле - это нонсенс.Удалить все назначения и читает из userCommentItems.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...