[英]JSF convertNumber throws java.lang.IllegalArgumentException: argument type mismatch Error
[英]JSF throws argument type mismatch when binding
我正在嘗試執行以下操作:當用戶在rich:calendar
組件中輸入一個值時, h:inputText
應將其required
屬性設置為true
。 我正在按照這篇文章中的說明進行操作: 通過 JavaScript 引用 JSF 控件的屬性
很抱歉創建另一篇文章,但我不知道如何將代碼發布到評論區並使其可讀。 該頁面拋出此錯誤:
javax.el.ELException: /pages/overtime/overtime-n.xhtml @121,65 binding="#{oc.overtimeDate}": java.lang.IllegalArgumentException: argument type mismatch
問題是綁定在c:forEach
循環內,我正在嘗試使用循環變量進行綁定。 overtime.overtimeItems
被定義為一個ArrayList<OvertimeComponent>
,每個 OvertimeComponent 對象都具有各種屬性( overtimeDate
、 overtimeDateId
、 id
、 overtimeHours
等)。
<c:forEach items="#{overtime.overtimeItems}" var="oc">
<rich:calendar value="#{oc.overtimeDate}"
requiredMessage="Date 1 is required."
id="#{oc.overtimeDateId}"
binding="#{oc.overtimeDate}"
required="#{oc.id == 1 ? true : false}">
</rich:calendar>
<h:inputText value="#{oc.overtimeHours}"
id="#{oc.overtimeHoursId}"
requiredMessage="Hours is required."
required="#{not empty oc.overtimeDate.value}" >
</h:inputText>
.....
</c:forEach>
如果rich:calendar
對象有值,我如何使h:inputText
必需? 有一種方法可以使用日歷的binding
屬性來執行此操作,但我不確定如何在c:forEach
。 我不能在這個項目中使用 AJAX。 謝謝。
binding
屬性應該指向UIComponent
,而不是像Date
這樣的值對象。 如果您沒有使用c:forEach
,您上一個問題中的答案會起作用。
<rich:calendar value="#{oc.overtimeDate}"
requiredMessage="Date 1 is required."
id="#{oc.overtimeDateId}"
binding="#{calendarComponent}"
required="#{oc.id == 1 ? true : false}">
</rich:calendar>
<h:inputText value="#{oc.overtimeHours}"
id="#{oc.overtimeHoursId}"
requiredMessage="Hours is required."
required="#{not empty calendarComponent.value}" >
</h:inputText>
上面的示例將組件綁定到“頁面范圍”,而不是特定的 bean,因為您通常對 bean 內部的組件不感興趣。 您可以隨意命名#{calendarComponent}
。 您可以在同一頁面的任何位置以相同的名稱訪問它。
但是,在您的特定情況下,您使用的是c:forEach
而不是ui:repeat
,因此組件實際上在組件樹中ui:repeat
( ui:repeat
僅在 HTML 渲染器中重復)。 這意味着您不能使用建議的方法。 然后所有組件將共享相同的綁定,這是錯誤的。 最好將UIComponent
(更准確地說, UIInput
)屬性添加到oc
后面的對象並綁定到它,以便每個組件都有自己唯一的綁定。 例如
public class OvertimeComponent {
private UIInput calendarComponent;
// ...
和
<rich:calendar value="#{oc.overtimeDate}"
requiredMessage="Date 1 is required."
id="#{oc.overtimeDateId}"
binding="#{oc.calendarComponent}"
required="#{oc.id == 1}">
</rich:calendar>
<h:inputText value="#{oc.overtimeHours}"
id="#{oc.overtimeHoursId}"
requiredMessage="Hours is required."
required="#{not empty oc.calendarComponent.value}" >
</h:inputText>
(請注意,我簡化了rich:calendar
required
屬性的 EL,因為它已經返回了一個boolean
)
為什么日歷上的值和組件綁定都指向同一個 el 表達式? 您不能在類型為 date 的 Richfaces 日歷上進行組件綁定。
另外,您是否嘗試過使用 ui:repeat 而不是 c:foreach ?
https://rogerkeays.com/jsf-c-foreach-vs-ui-repeat
眾所周知,c:foreach 會在與 jsf 和 jsp 生命周期不匹配相關的 facelets 上下文中出現問題。 查看上面的帖子以獲取更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.