10

が設定されている場合、読み取り専用の inputText は検証されませんrequired="true"

<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>
4

1 に答える 1

17

これは期待どおりに動作しています。readonly="true"すべての意図と目的において、JSF は要求ライフサイクル全体で指定された値を評価しません。RENDER_RESPONSEこれを行うための推奨される方法は、ビューがユーザーに表示される段階で値を読み取り専用にすることです。他のフェーズでは、JSF ランタイムが入力フィールドを書き込み可能として解釈する必要があります。そのために、以下を使用できます。

<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>

このように、readonlyプロパティはユーザーがページを表示している場合にのみ true になります。他のすべてのフェーズでは、JSF ランタイムはフィールドを書き込み可能と見なし、その結果、フィールドで検証が実行されます。

参考文献:

于 2013-09-09T08:37:35.100 に答える