接受表单提交而不选择任何单选按钮

时间:2012-11-21 15:40:31

标签: validation jsf seam jsf-1.2 selectoneradio

我正在使用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拒绝提交并导致验证错误。我尝试为它编写一个自定义验证器,不幸的是,这对我没用。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

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

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

通过跳过后续阶段,servlet将调用应用程序阶段并应用您的应用程序逻辑,当您跳过处理阶段时,您的发布请求中的数据将不会绑定到您的bean。所以在使用这些bean之前,你应该从RequestParameterMap读取它们的价值,就像我吼叫的那样(在我的情况下):

    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));
        }
    }

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