Я написал JS функцию по очищению ошибок p:календарь, если были введены неверные данные в поле календаря (вручную заполнили поле календаря) - но она не работает. Цель - убрать ошибки валидации если пользователь очистил поле (на лету)
вот мой JSF сниппет
<div class="item">
<p:outputLabel id="l_dateBirth" for="dateBirth" value="#{msgs['customerForm.dateBirth']}"/>
<p:calendar id="dateBirth" widgetVar="dateBirthVar" value="#{customerBean.customer.dateOfBirth}"
placeholder="MM/dd/yyyy"
showOn="button" navigator="true"
pattern="MM/dd/yyyy" yearRange="-120:+0"
mindate="#{dateBean.minDate}"
maxdate="#{dateBean.maxDateOfBirth}"
required="true"
requiredMessage="#{msgs['Error.dateBirth.mandatory']}"
disabled="#{customerBean.mode eq 'EDIT'}">
<f:ajax execute="@this" event="dateSelect" render="m_dateBirth" />
<p:ajax event="keyup" oncomplete="hideCustomerCalendarErrMsg('dateBirth')" />
<f:validator binding="#{dateOfBirthValidator}"/>
</p:calendar><p:message id="m_dateBirth" for="dateBirth" display="text"/>
</div>
вот мой JS
function hideCustomerCalendarErrMsg(variable) {
var inputField, msg;
inputField = PF('dateBirthVar').getDate();
msg = document.getElementById("createEditCustomerForm:accordion:m_" + variable);
if (inputField.value === null) {
msg.innerHTML = "";}}
Не надо делать ajax там, где он не нужен. Компоненты из набора Primefaces часто имеют возможность навешать клиентские обработчики на разные события.
Другой приём использует возможность биндинга компонентов jsf.
Причём не обязательно создавать свои классы-бины для этого. Достаточно придумать название и объект будет автоматически размещён в RequestScope.
Таким нехитрым образом, благодаря binding="#{dateBirthMsg}"
, компонент мессаги каждый раз будет доступен в RequestScope под именем dateBirthMsg
.
Что нам это даёт?
Мы теперь можем ссылаться на этот компонент и его свойства в jsf.
Свойство clientId
позволяет сильно упростить скрипты, где нужен id элемента html. Ибо оно и есть этот самый id, и никаких заумных вычислений, чреватых ошибками, не требуется.
Просто пишем #{dateBirthMsg.clientId}
там, где скрип должен увидеть id элемента, соответствующего мессаге о дне рождения.
<p:calendar ...
onkeyup="document.getElementById('#{dateBirthMsg.clientId}').innerHTML=''">
<p:ajax event="dateSelect" update="m_dateBirth"/>
</p:calendar>
<p:message id="m_dateBirth" for="dateBirth" display="text" binding="#{dateBirthMsg}"/>
И ещё. Нет никаких причин использовать для одного события p:ajax
, а для второго f:ajax
. А если захотите использовать три события? Какой тогда ajax для третьего? На самом деле можно одновременно использовать сколь угодно много и p:ajax
и f:ajax
для разных событий (и возможно даже для одного и того же, надо уточнить).
Виртуальный выделенный сервер (VDS) становится отличным выбором
Используется компонент Fabrik, он создает элемент календарь для всех элементов с датой
Нужно сделать полосатую таблицуВсе было бы довольно просто, но мою таблицу генерирует js с помощтю такого метода:
Ребят, помогите пожалуйста, недавно начал изучать typescript, как и angularВопрос в следующем, у меня есть виды данных d, f, b которые я ввожу в инпуты
Что нужно сделать, чтобы функция scandir заработала с путями в которых есть пробелы