Имам модел на домейн за формуляр за маска за търсене, който съдържа динамичен брой избори на вход. За някои типове въвеждане inputText, който показва избраната стойност и е само за четене, бутон за избор на стойност и бутон за изчистване на избраната стойност. Проблемът ми е, че когато се щракне върху бутона за изчистване, inputText не се обновява. Опреснявам чрез име на css клас с генерирано и уникално име на css клас. Не намерих друг начин да адресирам правилно десния inputText.
Ето малко код за показване на подхода:
<!-- rows iteration -->
<ui:repeat ...>
<!-- columns iteration -->
<ui:repeat ...>
<ui:param name="curDummyCssClass" value="searchFieldChoiceDummyCssClass#{curRowIndex}#{curColumnIndex}" />
<p:inputText value="#{curMaskElement.propertyValue}" readonly="true" styleClass="#{curDummyCssClass}" size="#{curFieldSize}" rendered="#{(curIsChoice) and curHasValue}">
<f:converter converterId="choiceListConverterSearchMask" />
</p:inputText>
<!-- button for value selection -->
<p:commandButton ... />
<!-- button to clear value -->
<p:commandButton immediate="true" actionListener="#{searchMaskBL.clearChoiceSelection(curMaskElement)}" rendered="#{curIsChoice and curHasValue}"
icon="removeChoiceValueButtonIcon" update="@(.#{curDummyCssClass})" />
...
По принцип този подход работи. На началния екран се показва пълната маска за търсене. Ако потребителят е извършил търсене, се показват само полетата за търсене, които имат стойност. На тази 2-ра намалена маска за търсене бутонът за изчистване не опреснява inputText, но се изпълнява методът на backing bean (означава, че стойността се изчиства, но потребителският интерфейс не се опреснява). Няма грешка при валидиране или грешка в javascript, показана в firebug. Нямам идея да коригирам това или да го разреша. Генерираният код изглежда добре според мен:
<input id="searchInstancesFormId:j_idt163:1:j_idt165:1:colChoiceListSelectionSizedId" class="ui-inputfield ui-inputtext ui-widget ui-state-default ui-corner-all searchMaskInputElement searchMaskInputChoiceElement searchFieldShortChoiceDummyCssClass11" type="text" readonly="readonly" title="choice" size="40" value="Zur Freigabe" name="searchInstancesFormId:j_idt163:1:j_idt165:1:colChoiceListSelectionSizedId" role="textbox" aria-disabled="false" aria-readonly="true">
...
<button id="searchInstancesFormId:j_idt163:1:j_idt165:1:j_idt181" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only removeChoiceValueButton" type="submit" title="Alle Werte entfernen" onclick="PrimeFaces.ab({s:'searchInstancesFormId:j_idt163:1:j_idt165:1:j_idt181',u:'@(.searchFieldShortChoiceDummyCssClass11)'});return false;" name="searchInstancesFormId:j_idt163:1:j_idt165:1:j_idt181" role="button" aria-disabled="false">
Името на класа css е searchFieldShortChoiceDummyCssClass11. 11 е текущият ред и колона, така че всяко поле има свое уникално име на css клас, защото само едно поле може да бъде в една клетка в мрежата.
Нямам представа защо актуализацията не работи. Някакви съвети?
Поздрави Оливър
Получих изключение след неработещата актуализация:
Въведеният текст не е част от частичния отговор на ajax. Проверих xml. Но защо?