单击h:命令链接后我无法传递参数

  • 本文关键字:参数 命令 链接 单击 jsf
  • 更新时间 :
  • 英文 :


我正在尝试使用数据库中的数据创建一个测验,但我有点迷茫。

我有3张桌子:

  • 测验
  • 问题(多对一:测验)
  • 答案(多对一:问题)

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

        <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>

我通过GET参数获取"quizzBean.quizzId"。

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

所以我正在尝试在提交按钮中传递测验 id 以在 bean(@RequestScoped) 中检查它们,但是一旦单击提交按钮,测验 id 为空......

这是按钮:

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

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

public void checkTheAnswers(){
    System.out.println("FROMQUIZZID : " + fromQuizzId);
}

那么你知道为什么 quizzId 是空的吗?

你有一个requestScoped托管Bean,并且你使用http GET方法传递quizzId,在这种情况下,你应该使用托管bean的@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");
        ....

最新更新