Почему значение, назначенное с помощью Javascript виджету Primefaces inputText, не отправляется на сервер, когда readonly = true?

1

Я создал специальный код, который позволяет пользователю загружать диалог, чтобы указать некоторые критерии поиска.

Код, вызывающий диалог,

<i   class="fa fa-fw fa-dot-circle-o"
     onclick="PF('LoadLabelHomoVectoDialog').show();"
     />
<p:inputText
     id="CertificationCodeId"
     value="#{vC.postLabellingSearchCriteria.certificationCode}"
     readonly="true"
     />

Отображается пользователь, нажимая на значок и диалоговое окно. Пользователь делает некоторые действия в диалоговом окне, нажимает кнопку "ОК", а виджет InputText CertificationCodeId заполняется непосредственно с помощью Javascript. Я могу видеть в нем конкретную ценность.

Затем на главной странице (не более в диалоговом окне) я нажимаю кнопку "SEARCH", чтобы начать новый поиск, используя значение критериев, найденное в виджета InputText CertificationCodeId.

Если атрибут readonly равен "false", значение виджета правильно передается в ViewController на сервере.

Если атрибут readonly равен "true", значение виджета НЕ передается на ViewController на сервере.

Я думал, что атрибут readonly предназначен только для запрета ввода пользователя, но не для запрета передачи значения на сервер.

Что я не так?

Это проблема с Primefaces?

Существует ответ на мою проблему, чтобы проверить компоненты readonly, так или иначе, на форму submit, которая неактуальна из того, что предлагается !!! Предлагается дубликат ссылки, которую я предлагаю :-)

Теги:
primefaces
readonly

2 ответа

2

JSF и PrimeFaces не обрабатывают значения, когда входы отключены или readOnly для целей безопасности. Таким образом, даже хакер позволяет вводить и представляет форму, JSF-PrimeFaces проверяет компонент. Так что это стандартное поведение. Вам нужно включить его на стороне сервера.

Найдено здесь: https://forum.primefaces.org/viewtopic.php?t=15632

0

Поскольку я буду видеть, что видимый inputText READ-ONLY, единственное решение - дублировать READ-ONLY inputText как это...

<i   class="fa fa-fw fa-dot-circle-o"
     onclick="PF('LoadLabelHomoVectoDialog').show();"
     />
<p:inputText
     id="CertificationCodeId"
     value="#{vC.postLabellingSearchCriteria.certificationCode}"
     readonly="true"
     />
<p:inputText
     id="CertificationCodeIdBecauseJSFdontSentReadOnlyWidgetValueToServer"
     value="#{vC.postLabellingSearchCriteria.certificationCode}"
     style="display:none"
     />

Значение второго виджета отправляется на сервер, потому что оно не отключено или доступно только для чтения.

В коде Javascript я должен назначить два виджета.

JSF и PrimeFaces не обрабатывают значения, когда входы отключены или readOnly для целей безопасности. Таким образом, даже хакер позволяет вводить и представляет форму, JSF-PrimeFaces проверяет компонент.

Теперь я думаю, что проблема, которую JSF/Primefaces хочет избежать, всегда существует, потому что хакер может изменять содержимое скрытого виджета.

Единственное, что я вижу, это то, что код более сложный и менее читаемый :-)

Зачем делать простые, когда можно делать сложные?

  • 0
    Нет, смотрите двойную ссылку ...
  • 0
    @kukeltje - Я прочитал сообщенную двойную ссылку. Но вы прочитали двойную ссылку, которую я сообщил? Ваша дублирующая ссылка, если с 2015 года, а моя дублирующая ссылка с 2014 года! Фактически ваша дублирующая ссылка является дубликатом вопроса, опубликованного в 2014 году! Но, возможно, я неправильно понимаю, что вы скажете с «Нет»! Но в любом случае ответ на мой найденный вопрос правильный в сообщениях 2014 и 2015 годов. Лично я считаю, что ответ BalsuC в посте 2014 года более задокументирован.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню