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

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

Код, вызывающий диалоговое окно:

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

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

Затем на главной странице (не больше в диалоге) я нажимаю кнопку ПОИСК, чтобы начать новый поиск, используя значение критерия, найденное в CertificationCodeId виджете inputText.

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

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

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

Что я не так делаю?

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

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

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Поскольку я хочу, чтобы видимое inputText было ТОЛЬКО ДЛЯ ЧТЕНИЯ, единственное решение - дублировать ТОЛЬКО ДЛЯ ЧТЕНИЯ 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 не обрабатывают значения, когда входы отключены или доступны только для чтения.в целях безопасности.Так что даже хакер разрешает ввод и отправляет форму, JSF-PrimeFaces проверяет компонент.

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

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

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

0 голосов
/ 11 октября 2018

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

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

...