Где я должен поместить код, который извлекает все категории и делает их видимыми - PullRequest
1 голос
/ 20 декабря 2011

Мне (наконец) удалось сформировать вопрос так, как я хочу, чтобы он работал. Последняя часть все еще отсутствует: категории, к которым могут принадлежать вопросы. Я создал класс обработчика вопросов, который управляет сохранением и т. Д. Вопроса, и мне интересно, стоит ли мне ставить его вместе с другими методами в этом классе?

Есть 10 категорий (только идентификатор и описание). Я думаю, что мне не хватает опыта и знаний, чтобы точно знать, как я должен организовать и что принадлежит бобам.

public abstract class QuestionHandler {

    @Inject
    protected QuestionServiceBean questionBean;

    @Inject
    protected Question question;
    protected List<Answer> answers;
    protected List<Category> categories;
    protected String correctAnswer;

    public void updateQuestion() {
        questionBean.updateQuestion(question);
    }

    public String persist() {               
        question.setAnswers(answers);
        question.setCategories(categories);
        questionBean.persistQuestion(question);
    }

    public void persistAsUserSubmitted() {
        question.setAnswers(answers);
        question.setCategories(categories);
        questionBean.persistAsUserSubmitted(question);
    }

    protected void addAnswerAlternative() {
        if (answers != null) {
            answers.add(new Answer());
        }
    }

    public abstract void init();

        // Removed the getters/setters for readability.

}

Этот класс, конечно, расширен и реализовал метод init, но здесь это не важно.

Ответы [ 2 ]

1 голос
/ 20 декабря 2011

Если логика связана с вашим доменом , тогда CategoryServiceBean - правильное место для получения категорий.

0 голосов
/ 20 декабря 2011

Это не выглядит правильно.Вы взрываете свойства модели в контроллере.

protected Question question;
protected List<Answer> answers;
protected List<Category> categories;

public String persist() {               
    question.setAnswers(answers);
    question.setCategories(categories);
    questionBean.persistQuestion(question);
}

public void persistAsUserSubmitted() {
    question.setAnswers(answers);
    question.setCategories(categories);
    questionBean.persistAsUserSubmitted(question);
}

Можно было бы ожидать, что она будет больше

protected Question question;

public String persist() {               
    questionBean.persistQuestion(question);
}

public void persistAsUserSubmitted() {
    questionBean.persistAsUserSubmitted(question);
}

, если вы просто ссылаетесь на вложенные свойства в представлении по #{bean.question.answers}и #{bean.question.categories} вместо #{bean.answers} и #{bean.categories}.

Что касается конкретного вопроса, я предполагаю, что вы говорите о «доступных категориях», которые должны использоваться в <f:selectItems> и т.п.?Да, вы можете просто поместить его в отдельный компонент (область действия приложения).Но если это касается «выбранных категорий», просто свяжите его с Question как #{bean.question.categories}, как предлагалось ранее.Например,

<h:selectManyListbox value="#{bean.question.categories}" converter="#{categoryConverter}">
    <f:selectItems value="#{data.categories}" />
</h:selectManyListbox>

Обратите внимание, что на конвертер ссылается EL, потому что я предполагаю, что это @ManagedBean или @Named, поскольку вы хотите использовать @EJB внутри него (на основе вашего другого вопроса).

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