2016-09-13 3 views
-1

Dans ce code, j'obtiens authorId pour le nom de chaque auteur de bookListArray et le montre pour chaque livre, en utilisant l'élément itératif aBook. Comment puis-je refactoriser mon code sans scriplets? Comment puis-je itérer mon bookListArray en code .java?itération de JSP en utilisant jstl

<liferay-ui:search-container> 
<liferay-ui:search-container-results results="${bookListArray}" /> 
<liferay-ui:search-container-row className="builder.model.Book" keyProperty="bookId" modelVar="aBook"> 
    <liferay-ui:search-container-column-text property="bookName" name="book-Name" /> 
    <liferay-ui:search-container-column-text property="bookDescription" name="description" /> 
    <% 
    Author bookAuthor = AuthorLocalServiceUtil.getAuthor(aBook.getAuthorId());   
    %> 
    <liferay-ui:search-container-column-text value="<%=bookAuthor.getAuthorName() %>" name="Author" /> 
    <liferay-ui:search-container-column-jsp path="/html/actionBook.jsp" align="right" /> 
</liferay-ui:search-container-row> 
<liferay-ui:search-iterator /> 

Ce sont mes listes d'auteur et le livre:

List<Book> bookList = BookLocalServiceUtil.getBooks(QueryUtil.ALL_POS, QueryUtil.ALL_POS); 
List<Author> authorList = AuthorLocalServiceUtil.getAuthors(QueryUtil.ALL_POS, QueryUtil.ALL_POS); 

request.setAttribute("bookListArray", bookList); 
request.setAttribute("authorListArray", authorList); 

si vous voulez regarder mon projet, vous pouvez le faire ici: https://github.com/AlBoldyrev/Library/blob/master/bundles/tomcat-7.0.62/webapps/LibraryBook-portlet/WEB-INF/src/com/softwerke/BookAndAuthor.java

+0

@Parkash J'ai besoin de votre aide! : P – German

+0

Où est bookListArray, peut inclure ce code aussi –

+0

@ B'bekShakya J'ai mis à jour ma question – German

Répondre

0

La réponse n'a pas été si facile . Tout d'abord, dans ma situation, je peux seulement montrer des données à partir de tables de base de données. Par conséquent, pour résoudre ce problème, nous devrions créer 2 nouvelles classes de modèles pour y tenir des variables importantes. Je comprends, que ce n'était pas une question-chaîne, mais je suis un peu déçu que personne ne donne même des idées, car pour les professionnels, c'est très facile.

Alors:

  1. Nous devons créer de nouvelles classes AuthorModel et BookModel (j'omets tout paquet et d'importation info):

    public class AuthorModel { 
    private Author author; 
    private int count; 
    
    public AuthorModel(Author author) { 
        this.author = author; 
        this.count = BookLocalServiceUtil.countByAuthor(author.getAuthorId()); 
    } 
    
    public String getAuthorName() { 
        return author.getAuthorName(); 
    } 
    
    public long getAuthorId() { 
        return author.getAuthorId(); 
    } 
    
    public int getCount() { 
        return count; 
    } 
    } 
    

-

public class BookModel { 

private Book book; 
private Author author; 
private long authorId; 

public BookModel(Book book) { 
    this.book = book; 
} 

public String getBookName() { 
    return book.getBookName(); 
} 

public String getBookDescription() { 
    return book.getBookDescription(); 
} 

public String getAuthorName() throws PortalException, SystemException { 
    this.authorId = book.getAuthorId(); 
    author = AuthorLocalServiceUtil.getAuthor(authorId); 
    String authorName = author.getAuthorName(); 
    return authorName; 
} 

public long getBookId() { 
    return book.getBookId(); 
} 
} 
  1. Après cela, nous devrions utiliser ce cours dans notre classe portlet:

List<BookModel> bookModelList = ArrayUtil.getAllBooks(); 
List<AuthorModel> authorModelList = ArrayUtil.getAllAuthors(); 
request.setAttribute("bookModels", bookModelList); 
request.setAttribute("authorModels", authorModelList); 

  1. Et nos méthodes getAllBooks()/getAllAuthors():

public class ArrayUtil { 

protected static List<AuthorModel> getAllAuthors() throws SystemException{ 
    List<AuthorModel> authors = new ArrayList<AuthorModel>(); 
    List<Author> authorList = AuthorLocalServiceUtil.getAuthors(QueryUtil.ALL_POS, QueryUtil.ALL_POS); 
    for (Author author : authorList) { 
     authors.add(new AuthorModel(author)); 
    } 
    return authors; 
} 

protected static List<BookModel> getAllBooks() throws SystemException{ 
    List<BookModel> books = new ArrayList<BookModel>(); 
    List<Book> bookList = BookLocalServiceUtil.getBooks(QueryUtil.ALL_POS, QueryUtil.ALL_POS); 
    for (Book book: bookList) { 
     books.add(new BookModel(book)); 
    } 
    return books; 
} 
} 
0

T La meilleure approche pour cela est de récupérer la liste dans votre contrôleur et de l'ajouter à la requête en tant qu'attributs. Ensuite, vous pouvez itérer avec c: foreach:

Exemple:

Controller:

List<Author> authorList = AuthorLocalServiceUtil.getAuthors(QueryUtil.ALL_POS, QueryUtil.ALL_POS); 
request.setAttribute("authorModels", authorList); 

JSP:

<c:foreach items="${authorList}" var="author"> 
    <c:out value="${author.attr1}"/> 
    <c:out value="${author.attr2}"/> 
</c:foreach> 

Ensuite, vous devez inclure quelque chose comme ça dans votre SearchContainer .