Ярлык главного экрана не добавит

Сбой проверки с сообщением «form: location: Ошибка проверки: значение недопустимо»

blockquote>

Эта ошибка сводится к тому, что выбранная элемент не соответствует ни одному из доступных значений элемента выбора, указанного любым вложенным тегом во время обработки запроса на отправку формы.

Как часть защиты от подделанных / взломанных запросов, JSF будет повторять все доступные выберите значения элемента и проверьте, если selectedItem.equals(availableItem) возвращает true для хотя бы одного доступного значения элемента. Если значение одного элемента не совпадает, вы получите именно эту ошибку проверки.

Этот процесс находится под обложками в основном так, как показано ниже, в соответствии с тем, что bean.getAvailableItems() представляет собой полный список доступных элементов выбора, определенных в :

String submittedValue = request.getParameter(component.getClientId());
Converter converter = component.getConverter();
Object selectedItem = (converter != null) ? converter.getAsObject(context, component, submittedValue) : submittedValue;

boolean valid = false;

for (Object availableItem : bean.getAvailableItems()) {
    if (selectedItem.equals(availableItem)) {
        valid = true;
        break;
    }
}

if (!valid) {
    throw new ValidatorException("Validation Error: Value is not valid");
}

Итак, на основе по логике выше эта проблема может логически иметь по крайней мере следующие причины:

  1. Выбранный элемент отсутствует в списке доступных элементов.
  2. Метод equals() класса, представляющего выделенный элемент, отсутствует или сломан.
  3. Если задействован пользовательский Converter, он вернул неправильный объект в getAsObject(). Возможно, это даже null.

Чтобы решить эту проблему:

  1. Убедитесь, что точно такой же список сохранен во время последующего запроса, особенно в случае несколько каскадных меню. Создание бина @ViewScoped вместо @RequestScoped должно исправить его в большинстве случаев. Также убедитесь, что вы не выполняете бизнес-логику в методе getter , а вместо этого в @PostConstruct или методе действия (слушателя). Если вы полагаетесь на конкретные параметры запроса, вам нужно будет явно хранить их в компоненте @ViewScoped или повторно передать их при последующих запросах, например. . См. Также Как выбрать правильную область видимости бобов?
  2. Убедитесь, что метод equals() реализован правильно. Это уже сделано на стандартных Java-типах, таких как java.lang.String, java.lang.Number и т. Д., Но необязательно на пользовательских объектах / beans / entites. См. Также Правильный способ выполнения равного контракта . Если вы уже используете String, убедитесь, что кодировка символов запроса настроена правильно. Если он содержит специальные символы, а JSF сконфигурирован для визуализации вывода как UTF-8, но интерпретирует входные данные, например. ISO-8859-1, то он потерпит неудачу. См. Также a.o. Вход Unicode, полученный через входные компоненты PrimeFaces, поврежден .
  3. Отлаживать / регистрировать действия вашего пользовательского Converter и исправлять его соответствующим образом. Для рекомендаций см. Также Значение параметра ошибки преобразования для 'null Converter' Если вы используете java.util.Date в качестве доступных элементов с , убедитесь, что вы не забыли полную часть времени в шаблоне. См. Также "Ошибка проверки: значение недействительно" Ошибка

См. также:


Если кто-то может бросить некоторые советы по устранению неполадок / отладки для этой проблемы, это будет очень полезно.

blockquote>

Просто задайте здесь ясный и конкретный вопрос. Не задавайте слишком широких вопросов;)

0
задан VoidMain 16 January 2019 в 08:30
поделиться

1 ответ

вы можете использовать этот метод в своем классе приложений

public void createShortCut() {

            Intent shortcutintent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
            shortcutintent.putExtra("duplicate", false);
            shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
            Parcelable icon = Intent.ShortcutIconResource.fromContext(getApplicationContext(),
                    R.drawable.logo);
            shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);
            shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(getApplicationContext(), SplashActivity.class));
            sendBroadcast(shortcutintent);

        }
    }

и применить это разрешение

    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
0
ответ дан Ahmed Karam 16 January 2019 в 08:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: