это не показывает сообщение h: когда я покидаю selectOneMenu
Код, который размещен до сих пор, выглядит хорошо.Проблема вызвана в другом месте.Возможно, вы вкладываете HTML <form>
s, что недопустимо.Убедитесь, что вы не вкладываете компоненты JSF <h:form>
.По другим причинам см. Также commandButton / commandLink / ajax метод действия / слушателя не вызван или входное значение не обновлено .
то же самое происходит с t:fileInputUpload
.
К сожалению, элемент HTML4 <input type="file">
и ajax XHR1 не очень хорошо сочетаются друг с другом.Чтобы определить, выбран ли файл, требуется запрос multipart/form-data
ajax, который поддерживается только в HTML5 / XHR2 (на данный момент PrimeFaces 3.0 является единственной библиотекой компонентов JSF, которая поддерживает эту теорию! Я не проверял ее).Таким образом, запрос проверки ajax полностью игнорируется <t:inputFileUpload>
.Поскольку JSF / Tomahawk - это всего лишь генератор HTML-кода, он не может ничего сделать для вас здесь.Лучшее, что вы можете сделать, это проверить его простым ванильным JS / HTML.
<t:inputFileUpload id="upfile" value="#{bean.file}" required="true"
onblur="document.getElementById('uploadMessage').style.display = (!value) ? 'block' : 'none'"
/>
<h:panelGroup>
<h:message for="uploadMessage" style="color: #FF0000" />
<span id="uploadMessage" style="display: none; color: #FF0000">Seleccione una archivo...</span>
</h:panelGroup>
(<h:message>
сохраняется, так что сообщение проверки на стороне сервера будет отображаться в любом случае, когда вынажмите командную кнопку, которая запускает синхронный (не AJAX) запрос)
Не связанный с конкретной проблемой, вы должны предпочесть поместить код JS и CSS в егособственные .js
и .css
файлы, которые вы включаете в <script>
и <link>
в <h:head>
.