入力フィールドのカスタム データ型を作成します。(クラス「金額」を参照)。入力フィールド「amountId」に値を設定すると、完璧に機能します。しかし、フォームを送信して別のページに移動したい場合は、「引数の型が一致しません」という例外が発生します。
誰かが私に説明できますか、なぜこの例外が発生するのですか?
- 入力値を文字列に変換するコンバーターが必要ですか?
- JSF が値を取得するために必要な Amount クラスのいくつかのメソッドを実装するのを忘れましたか?
これが私のコードです:
public class Amount implements Serializable {
public Amount(BigDecimal bd){
}
public Amount(String s) {
}
@Override
public String toString() {
}
}
@ManagedBean(name="myBean")
@RequestScoped
public class MyBean extends BaseBean {
private Amount amountValue;
private UIInput amountValueId;
public Amount getAmountValue() {
return amountValue;
}
public void setAmountValue(Amount amountValue) {
this.amountValue = amountValue;
if (this.amountValueId != null)
this.amountValueId.setSubmittedValue(amountValue);
}
public UIInput getAmountValueIdId() {
return amountValueId;
}
public void setAmountValueId(UIInput amountValueId) {
this.amountValueId = amountValueId
}
}
<h:inputText id="amountValueId" binding="#{myBean.amountValueId}" size="30" value="#{myBean.amountValue}" />
javax.servlet.ServletException: javax.el.ELException: java.lang.IllegalArgumentException: argument type mismatch
javax.faces.webapp.FacesServlet.service(FacesServlet.java:229)
org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:357)
org.apache.myfaces.view.facelets.el.ContextAwareELException: javax.el.ELException: java.lang.IllegalArgumentException: argument type mismatch
org.apache.myfaces.view.facelets.el.ContextAwareTagValueExpression.setValue(ContextAwareTagValueExpression.java:166)
javax.faces.component.UIInput.updateModel(UIInput.java:406)
javax.faces.component.UIInput.processUpdates(UIInput.java:328)
javax.faces.component.UIForm.processUpdates(UIForm.java:263)
javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1469)
javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1469)
javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1469)
javax.faces.component.UIViewRoot._processUpdatesDefault(UIViewRoot.java:1397)
javax.faces.component.UIViewRoot.access$600(UIViewRoot.java:74)
javax.faces.component.UIViewRoot$UpdateModelPhaseProcessor.process(UIViewRoot.java:1535)
javax.faces.component.UIViewRoot._process(UIViewRoot.java:1358)
javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:806)
org.apache.myfaces.lifecycle.UpdateModelValuesExecutor.execute(UpdateModelValuesExecutor.java:38)
org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:170)
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:357)