2016-04-29 12 views
0

Я создаю страницу 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> 
+0

Ваш вопрос сбивает с толку. Где находится '', который должен показывать сообщение об ошибке проверки? – BalusC

+0

@BalusC Я уже решил проблему с вашим ответом по другому вопросу, спасибо; Я не знал, что ошибка проверки будет отображаться на '', когда я спросил, я ожидал, что сервер отобразит страницу ошибки «HTTP 400 Bad Request», информирующую об ошибке проверки. '' решил это. –

+0

Ах, ну, начальный вопрос не сделал ваши ожидания ясными. – BalusC

ответ

1

Это невероятно, как я искать решение в течение нескольких часов, и я считаю, это 20 минут после того, как задать этот вопрос ...

Я просто заменил вид пары тега:

<o:viewParam name="test" value="#{requiredTestBean.value}" required="true"> 
    <o:viewParamValidationFailed sendError="400" /> 
</o:viewParam> 

И он работал отлично.

Код: https://stackoverflow.com/a/29841384/804976

 Смежные вопросы

  • Нет связанных вопросов^_^