,當我有兩個字段驗證沒有複合的工作如下驗證複合使用java.lang.Double中值
public class DoubleMustBeGreaterThanSecondDouble implements Validator {
@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
Double firstDouble = (Double) value;
Double secondDouble = (Double) component.getAttributes().get("secondDouble");
if (firstDouble <= secondDouble) {
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, null, null);
throw new ValidatorException(msg);
}
}
}
<p:inputText size="5"
validatorMessage="Plate maximum thickness must exceed plate minimum thickness"
value="#{calculator.boltAnalysis.plate1.maximum_thickness}">
<f:validator
validatorId="doubleMustBeGreaterThanSecondDouble" />
<f:attribute name="secondDouble"
value="#{calculator.boltAnalysis.plate1.minimum_thickness}" />
<p:ajax event="change" update="@this" />
</p:inputText>
但轉化爲複合後,我得到java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Double:
上拋出ClassCastException異常只是
Double firstDouble = (Double) value;
,而不是在
Double secondDouble = (Double) component.getAttributes().get("secondDouble");
這裏是作爲複合
<p:inputText size="5"
validatorMessage="Plate maximum thickness must exceed plate minimum thickness"
value="#{cc.attrs.plateMaximumThickness}">
<f:validator
validatorId="doubleMustBeGreaterThanSecondDouble" />
<f:attribute name="secondDouble"
value="#{cc.attrs.plateMinimumThickness}" />
<p:ajax event="change" update="@this" />
</p:inputText>
<stk:plate
plateLabel="3"
plateMinimumThickness="#{calculator.boltAnalysis.plate3.minimum_thickness}"
plateMaximumThickness="#{calculator.boltAnalysis.plate3.maximum_thickness}"
/>
這是不可思議的是一個價值過來的字符串,另一個爲double。我是否只需更改爲Double firstDouble = Double.parseDouble(value);
即可,而不用擔心爲什麼component.getAttributes()
仍然作爲double(Java Bean中的屬性的實際類型)傳遞給驗證程序,即使複合材料看起來與這兩個字段相同去繼續前進?
編輯
這是我的複合接口。即使在指定類型後,我仍然得到了類演員例外
<composite:interface>
<composite:attribute name="plateLabel" />
<composite:attribute name="plateMinimumThickness" type="java.lang.Double" />
<composite:attribute name="plateMaximumThickness" type="java.lang.Double" />
</composite:interface>
<composite:implementation>
...
問題中缺少此信息,但是您是否在<''中顯式指定了複合屬性中的值類型? –
BalusC
起初沒有,但後來我試了一下。 。看到你已經完全合格,看起來像我需要接下來嘗試。 –
jeff
@BalusC在我的界面中指定type =「java.lang.Double」不起作用。應該是? – jeff