Readonly inputText doesn't validate if required="true"
is set.
<h:panelGrid columns="3" id="townShipPanelGroup">
<p:inputText value="#{AddNewLifeProposalActionBean.beneficiariesInfoDTO.residentAddress.township == null ? '' : AddNewLifeProposalActionBean.beneficiariesInfoDTO.residentAddress.township.name}"
style="width:250px;margin-left:-4px;" id="townShip" readonly="true">
<f:validateLength maximum="36"/>
</p:inputText>
<p:commandLink immediate="true" oncomplete="selectTownShipDialog.show()" id="selectTownShipDialogLink" action="#{AddNewLifeProposalActionBean.loadTownshipList()}">
<h:graphicImage url="/images/search.png" style="height:30px;width:30px"/>
</p:commandLink>
</h:panelGrid>
This is behaving as expected. For all intents and purposes, JSF doesn't evaluate a value that is designated as readonly="true"
throughout the request lifecycle. The recommended way to get this done is to make the value readonly during the RENDER_RESPONSE
phase, where the view is being presented to the user. During any other phase, you want the JSF runtime to interpret the input field as writeable. For that purpose, you can use:
<p:inputText value="#{AddNewLifeProposalActionBean.beneficiariesInfoDTO.residentAddress.township == null ? '' : AddNewLifeProposalActionBean.beneficiariesInfoDTO.residentAddress.township.name}"
style="width:250px;margin-left:-4px;" id="townShip" readonly="#{facesContext.renderResponse}">
<f:validateLength maximum="36"/>
</p:inputText>
This way, the readonly
property is only true when the user is viewing the page. For all other phases, the JSF runtime will see the field as writeable and as a result, validation will be carried out on the field
References:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With