Как глобально стилизовать все входные компоненты PrimeFaces, установив required = "true" - PullRequest
2 голосов
/ 12 марта 2019

В качестве примера рассмотрим следующую простую форму с компонентами ввода простых лиц, некоторые из которых являются обязательными:

<h:form id="person">

    <h:panelGrid columns="2">

        <p:outputLabel for="inputFN" value="First Name"
            indicateRequired="auto" />
        <p:inputText id="inputFN" required="true"
            placeholder="First Name right here please." />

        <p:outputLabel for="inputLN" value="Last Name"
            indicateRequired="auto" />
        <p:inputText id="inputLN" required="true"
            placeholder="Last Name right here please." />

        <p:outputLabel for="inputBD" value="Date of Birht"
            indicateRequired="auto" />
        <p:calendar id="inputBD" required="false"
            placeholder="Please kindly let us know the very starting point in time of your existence!" />

        <p:outputLabel for="inputFC" value="Favourite Color"
            indicateRequired="auto" />
        <p:inputText id="inputFC" required="false"
            placeholder="What is your favourite colour?? Green? Yellow? Please!" />

        <p:outputLabel for="inputFH" value="Favourite Hobby"
            indicateRequired="auto" />
        <p:autoComplete id="inputFH" required="true"
            placeholder="Your favourite hobby? Stackoverflow I bet!" />

    </h:panelGrid>
    (*) these fields are vital! Don't even think about submission when empty!

</h:form>

Выводимый результат: inputFN (обязательно), inputFC ()не обязательно) и inputFH (обязательно) выглядит следующим образом:

<input id="person:inputFN" name="person:inputFN" type="text" placeholder="First Name ..." aria-required="true"
    class="ui-inputfield ui-inputtext ui-widget ui-state-default ui-corner-all"
    role="textbox" aria-disabled="false" aria-readonly="false">

<input id="person:inputFC" name="person:inputFC" type="text" placeholder="What is your favourite colour?..."
    class="ui-inputfield ui-inputtext ui-widget ui-state-default ui-corner-all"
    role="textbox" aria-disabled="false" aria-readonly="false">

<input id="person:inputFH_input" name="person:inputFH_input" type="text"
    class="ui-autocomplete-input ui-inputfield ui-widget ui-state-default ui-corner-all ui-state-error"
    autocomplete="off" placeholder="Your hobby? ..." value="" role="textbox"
    aria-disabled="false" aria-readonly="false" aria-autocomplete="list">

Я не вижу возможности, чтобы селектор CSS перехватывал только обязательные поля.Обратите внимание, что не все необходимые компоненты получают aria-required="true", предложенный для использования @Malloware.Например, p:autocomplete inputFH нет.

Поскольку у нас есть множество входных компонентов, распределенных в представлениях и (вложенных) составных компонентах, а атрибут required иногда определяется динамически, плюс я ленив,Я хотел бы, чтобы не касался каждого компонента и добавлял к нему styleClass="#{something.isRequired ? 'required' : ''}".

Существует ли простой способ глобально включить на стороне клиента различие между обязательными и необязательнымиполя?

В конечном итоге я хочу выделить цветовые метки (используя селектор ::placeholder CSS) всех обязательных полей в качестве дополнения к indicateRequired, любезно предоставленному p:outputLabel.

1 Ответ

2 голосов
/ 12 марта 2019

Просто используйте этот селектор CSS. Гарантируется работа для всех полей ввода PF для PF 7.0 или выше.

input[aria-required="true"] {
   color: red;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...