Я создаю страницу JSF 2.2, для которой требуется параметр GET для отображения данных, но мне трудно обеспечить выполнение этого параметра.Отправлять ошибку HTTP 400, когда <f: viewParam required> не удалось выполнить с помощью свойства @NotNull
Я также пытался использовать Omnifaces's viewParam без успеха, я не знаю, что попробовать больше.
Я также нашел similar issue on this link, и я попробовал все предложения ...
Когда я открываю:
http://url-to/required-test.xhtml?test=foo
Он работает правильно, отображается Param is: foo
.
Но когда я открываю:
http://url-to/required-test.xhtml?test=
http://url-to/required-test.xhtml
Param is: null!
отображается вместо сообщения об ошибке проверки. И null!
отображается только потому, что я добавил специальный выходной текст только для этого теста, в реальном приложении он мог бы вызвать NullPointerException где-то.
Как сделать атрибут required
на <f:viewParam />
или <o:viewParam />
работы?
Мой тестовый код:
требуется-test.xhtml
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:o="http://omnifaces.org/ui">
<f:metadata>
<f:viewParam name="test" value="#{requiredTestBean.value}" required="true" />
</f:metadata>
<h:head>
<title>Required Test</title>
</h:head>
<h:body>
Param is:
<h:outputText value="#{requiredTestBean.value}" rendered="#{requiredTestBean.value != null}" />
<h:outputText value="null!" rendered="#{requiredTestBean.value == null}" />
</h:body>
</html>
RequiredTestBean.java
package test;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.validation.constraints.NotNull;
@ManagedBean
@RequestScoped
public class RequiredTestBean
{
@NotNull
private String value;
@NotNull
public String getValue()
{
return value;
}
public void setValue(@NotNull String value)
{
this.value = value;
}
}
Контекст PARAMS на web.xml
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>javax.faces.CLIENT_WINDOW_MODE</param-name>
<param-value>url</param-value>
</context-param>
<context-param>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>
<param-value>true</param-value>
</context-param>
Ваш вопрос сбивает с толку. Где находится '', который должен показывать сообщение об ошибке проверки? –
BalusC
@BalusC Я уже решил проблему с вашим ответом по другому вопросу, спасибо; Я не знал, что ошибка проверки будет отображаться на ' ', когда я спросил, я ожидал, что сервер отобразит страницу ошибки «HTTP 400 Bad Request», информирующую об ошибке проверки. ' ' решил это. –
Ах, ну, начальный вопрос не сделал ваши ожидания ясными. – BalusC