单击h:commandLink后,我无法通过参数

时间:2017-01-18 13:41:44

标签: jsf

我试图用db中的数据创建一个quizz,但我有点迷失。

我有3张桌子:

  • QUIZZ
  • 问题(ManyToOne:Quizz)
  • 答案(ManyToOne:问题)

所以我编写了这段代码来显示每个问题及其答案:

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

我得到了&#34; quizzBean.quizzId&#34;通过GET参数。

h:selectOneRadio的值是我的Question实体中的selectedAnswerId属性,因此我尝试将其与用户选择的答案绑定。

所以我试图在提交按钮中传递quizz id以在bean中检查它们(@RequestScoped),但是点击提交按钮后quizz id为null ...

这里是按钮:

        <p>Questions</p>
        <ui:repeat value="#{questionBean.fetchQuestionsFromQuizz(quizzBean.fetchQuizz(quizzBean.quizzId))}" var="i" varStatus="current">
            <p>#{i.question}</p>
            <h:selectOneRadio value="#{i.selectedAnswerId}">
                <f:selectItems value="#{answerBean.fetchAnswersFromQuestion(i)}" var="item"
                               itemLabel="#{item.answer}" itemValue="#{item.id}" />
            </h:selectOneRadio>
        </ui:repeat>

这是方法(简单的打印):

<h:commandLink value="Submit" action="#{questionBean.checkTheAnswers()}">
    <f:setPropertyActionListener target="#{questionBean.fromQuizzId}" value="#{quizzBean.quizzId}" />
</h:commandLink>

那么你对quizzId为何为空有任何想法吗?

1 个答案:

答案 0 :(得分:0)

你有一个requestScoped托管bean,你使用http GET方法传递quizzId,在这种情况下,你应该使用managedbean的@PostConstruct init方法初始化使用GET方法的值归档的quizzId。

@PostConstruct
public void init() {
    try {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        Map<String, String> params =  facesContext.getExternalContext().getRequestParameterMap();
        if (params.containsKey("quizzId") {
            quizzId= params.get("quizzId");
        ....