Я создал специальный код, который позволяет пользователю загружать диалог, чтобы указать некоторые критерии поиска.
Код, вызывающий диалог,
<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, которая неактуальна из того, что предлагается !!! Предлагается дубликат ссылки, которую я предлагаю :-)
JSF и PrimeFaces не обрабатывают значения, когда входы отключены или readOnly для целей безопасности. Таким образом, даже хакер позволяет вводить и представляет форму, JSF-PrimeFaces проверяет компонент. Так что это стандартное поведение. Вам нужно включить его на стороне сервера.
Найдено здесь: https://forum.primefaces.org/viewtopic.php?t=15632
Поскольку я буду видеть, что видимый 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 хочет избежать, всегда существует, потому что хакер может изменять содержимое скрытого виджета.
Единственное, что я вижу, это то, что код более сложный и менее читаемый :-)
Зачем делать простые, когда можно делать сложные?