Данные рендеринга JSF загружаются из БД - PullRequest
0 голосов
/ 10 мая 2011

У меня есть данные, загруженные из БД, когда я нажимаю командную кнопку:

<h:commandButton value="Show article content and comments" action="#{dataBean.activateArticleContentView}" actionListener="#{dataBean.loadCurrentArticle}">
<f:attribute name="articleId" value="#{article.id}"></f:attribute>
</h:commandButton>

@ManagedBean
@ViewScoped
public class DataBean implements Serializable {

    ...

    private List<UserAcc> users;
    private List<Article> articles;
    private List<ArticleComment> articleComments;

    private Article currentArticle;

    public void loadComments(ActionEvent e) {
        DataBaseUtil dbu = new DataBaseUtil();
        int articleId = (Integer) e.getComponent().getAttributes()
                .get("articleId");
        articleComments = dbu.loadArticleComments(articleId);
    }

    public void loadCurrentArticle(ActionEvent e) {
        DataBaseUtil dbu = new DataBaseUtil();
        int articleId = (Integer) e.getComponent().getAttributes()
                .get("articleId");
        this.currentArticle = dbu.loadArticleById(articleId);
        this.currentArticle.setComments(dbu.loadArticleComments(articleId));
    }
...

загружает статью и ее комментарии.Также textArea и commandButton отображаются на той же странице для добавления комментария.

<h:inputTextarea value="#{persistenceBean.text}" style="height: 50px; width: 300px">
</h:inputTextarea>
<h:commandButton value="Save" actionListener="#{persistenceBean.saveComment}">
    <f:attribute name="userName" value="#{loginBean.name}"></f:attribute>
    <f:attribute name="articleId" value="#{dataBean.currentArticle.id}"></f:attribute>
</h:commandButton>

Командная кнопка активирует этот метод в другом компоненте (PersistenceBean):

public void saveComment(ActionEvent e){
        int articleId = (Integer) e.getComponent().getAttributes().get("articleId");
        String userName = (String) e.getComponent().getAttributes().get("userName");

        DataBaseUtil dbu = new DataBaseUtil();

        UserAcc user = dbu.loadUserByName(userName);
        ArticleComment comment = new ArticleComment();
        comment.setText(this.text);
        Date postat = new Date();
        comment.setPostat(postat.toString());

        dbu.saveComment(articleId, user.getId(), comment);
    }

MyВопрос заключается в том, как изменить визуализацию таблицы с комментариями, чтобы изменения могли быть показаны немедленно.Теперь мне нужно вернуться к представлению статей и нажать кнопку, которая показывает содержание статьи и комментарии.Могу ли я иметь более одного прослушивателя действий для кнопки, которая добавляет комментарий, другими словами, как использовать dataBean.loadCurrentArticle еще раз после добавления комментария.

1 Ответ

0 голосов
/ 10 мая 2011

Измените

actionListener="#{persistenceBean.saveComment}"

на

actionListener="#{dataBean.saveComment}"

и введите PersistenceBean в DataBean (на @EJB, я полагаю?), Чтобы вы могли сделать следующее вDataBean#saveComment():

persistenceBean.saveComment(e);
loadCurrentArticle();

Не относящиеся к конкретной проблеме, в JSF 2.x есть более элегантные способы передачи атрибутов.См. Также Как передать выбранную строку в commandLink внутри dataTable?

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