我正在使用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拒绝提交并导致验证错误。我尝试为它编写一个自定义验证器,不幸的是,这对我没用。
有什么建议吗?
答案 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));
}
}
然后应用我的真实业务逻辑。