0

Primefaces 拡張機能の InputNumber をベースに持つ複合コンポーネントを使用しています。required 属性を true に設定しましたが、メッセージは表示されません。また、フィールドが必須であることを示す * マークもありません。コードは次のとおりです。

<p:outputLabel for="maxvrednost" value="#{resources['skale.maxvrednost']}" />
        <asw:inputDecimal id="maxvrednost" bean="#{attrsBean}" column="maxvrednost" required="true" disabled="#{tip == 'brisanje'}" value="#{dto.maxvrednost}"/>
        <p:message for="maxvrednost" display="icon" />

複合コンポーネントのコードは次のとおりです。

<cc:interface>
    <cc:attribute name="bean" required="true" type="asw.iis.common.ui.beans.CommonListBackingBean" />
    <cc:attribute name="column" required="true" type="java.lang.String" />
    <cc:attribute name="value" required="true" type="java.lang.Object" />       
    <cc:attribute name="disabled" default="false" required="false"  type="java.lang.Boolean" />
    <cc:attribute name="title" required="false" type="java.lang.String" default=""/>
</cc:interface>
<cc:implementation>
    <pe:inputNumber emptyValue="" style="text-align: right;" value="#{cc.attrs.value}" required="#{cc.attrs.required}"          
        decimalSeparator="#{applicationPropertiesBean.decimalSeparator}" disabled="#{cc.attrs.disabled}"
        decimalPlaces="#{cc.attrs.bean.findNumberOfDecimalPlaces(cc.attrs.column)}" title="#{cc.attrs.title}"
        thousandSeparator="#{applicationPropertiesBean.groupSeparator}">
    </pe:inputNumber>
</cc:implementation>
4

1 に答える 1

1

100%適切な解決策ではありませんが、私にとってはうまくいきます:

<composite:interface >
    <composite:attribute name="value" required="false" type="java.lang.String" default=""></composite:attribute>
    <composite:attribute name="update" required="false" type="java.lang.String" default=""></composite:attribute>
    <composite:attribute name="process" required="false" type="java.lang.String" default=""></composite:attribute>
    <composite:attribute name="requiredMessage" required="false" type="java.lang.String" default=""></composite:attribute>
    <composite:attribute name="decimalPlaces" required="false" type="java.lang.Integer" default="0"></composite:attribute>
    <composite:editableValueHolder name="value" targets="num"></composite:editableValueHolder>
    <composite:

</composite:interface>
<composite:implementation>
<div id="#{cc.clientId}">
<pe:inputNumber id="num" roundMethod="S" decimalPlaces="#{cc.attrs.decimalPlaces}" symbol="#{applicationBean.currentCurrencySymbol}" 
    minValue="0" required="true" requiredMessage="#{cc.attrs.requiredMessage}" 
    value="#{cc.attrs.value}"></pe:inputNumber>
</div>
</composite:implementation>

次のように使用します。

                    <p:outputLabel value="Enter Amount" for="amt:num"></p:outputLabel>
        <p:message for="amt:num"></p:message>
        <comp:InputCurrency id="amt" roundMethod="S" decimalPlaces="0" symbol="#{applicationBean.currentCurrencySymbol}" 
            minValue="1" requiredMessage="#{loc._('Please enter amount to withdraw!')}"
            value="#{myBean.amount}"></comp:InputCurrency>

「required」属性は「true」にハードコードされていることに注意してください。複合コンポーネントの属性「required」を定義し、その値を inputNumber の「required」プロパティにコピーすると、必須として動作しますが、ラベルに「*」マークが表示されません。これは、inputNumber の 'required' 属性がレンダリング時に設定されておらず、'false' として返されるために発生します - 理由は不明ですが、これを掘り下げる時間がありませんでした。

于 2013-02-21T18:45:53.920 に答える