0

我正在使用 JSF 1.2 和 Seam 框架编写一个带有 Java EE 的应用程序。我有一个从单选按钮输入的表单,如下所示:

<h:selectOneRadio value="#{testAction.selectedOptionId}"
                 id="selectedQuestionOption"
                 layout="pageDirection">
    <s:selectItems var="selectedOption" value="#{currentQuestion.options}"
                   label="#{selectedOption.optionString}"
                   itemValue="#{selectedOption.optionId}"/>
 </h:selectOneRadio>

 <h:commandButton id="goToNextQuestion" value="Submit"
                 action="#{testAction.postAnswer}"/>

我想要这样,如果有人在没有选择单选按钮的情况下提交表单,我会接受结果,但它不起作用。因为在验证阶段 jsf 拒绝提交并导致验证错误。我试图为它编写一个自定义验证器,不幸的是这对我也不起作用。

有什么建议吗?

4

1 回答 1

0

通过编写自定义验证器,我没有找到任何解决此问题的方法,这在这种情况下应该是理想的解决方案。但我找到了解决这种情况的方法。immediate = "true"我可以通过像这样设置提交按钮来绕过绑定值和验证阶段:

 <h:commandButton id="goToNextQuestion" value="Submit" immediate="true"
             action="#{testAction.postAnswer}"/>

通过这样做跳过后续阶段,servlet 将转到调用应用程序阶段,并且将应用您的应用程序逻辑,并且当您跳过处理阶段时,来自您的发布请求的数据将不会绑定到您的 bean。RequestParameterMap因此,在使用这些 bean 之前,您应该从我下面所做的(在我的情况下)中读取它们的值:

    Map<String, String> paramMap = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();

    for (String key : paramMap.keySet()) {
        //log.info("Param: " + key + " Value: " + paramMap.get(key));
        if (key.contains("selectedQuestionOption")) {
            //log.info("OptionParam: " + key + " Value: " + paramMap.get(key));
            selectedOptionId = Integer.parseInt(paramMap.get(key));
        }
    }

然后应用我真正的业务逻辑。

于 2012-11-23T17:04:12.427 回答