Tôi đang làm việc với JSF 2.0, JBoss 7.1.1 Final và tôi gặp sự cố sau với selectOneMenu. Tôi muốn có thể thiết lập một trường trong bean được quản lý thành true/false/null. Vì vậy, tôi đã tạo ra sau selectOneMenu:h: selectOneMenu với các mục boolean không hoạt động với giá trị null
<h:selectOneMenu value="#{personList.criteria.registrationComplete}" >
<f:selectItem itemValue="#{null}" itemLabel="Any.." />
<f:selectItem itemValue="true" itemLabel="Yes"/>
<f:selectItem itemValue="false" itemLabel="No"/>
</h:selectOneMenu>
Bây giờ, nếu tôi chọn 'Bất kỳ ..', nó sẽ gán "false" vào lĩnh vực registrationComplete (đó là Boolean). Vì vậy, null được hiểu là sai. Tôi cũng cố gắng sử dụng các giá trị boolean trong selectItem (s), đó là:
<h:selectOneMenu value="#{personList.criteria.registrationComplete}" >
<f:selectItem itemValue="#{null}" itemLabel="Any.." />
<f:selectItem itemValue="#{true}" itemLabel="Yes"/>
<f:selectItem itemValue="#{false}" itemLabel="No"/>
</h:selectOneMenu>
Và tôi cũng đăng ký chuyển đổi trên khuôn mặt-config như sau:
<converter>
<converter-id>booleanConverter</converter-id>
<converter-class>javax.faces.convert.BooleanConverter</converter-class>
</converter>
và cố gắng sử dụng nó:
<h:selectOneMenu value="#{personList.criteria.registrationComplete}" >
<f:selectItem itemValue="#{null}" itemLabel="Any.." />
<f:selectItem itemValue="true" itemLabel="Yes"/>
<f:selectItem itemValue="false" itemLabel="No"/>
<f:converter converterId="booleanConverter"/>
</h:selectOneMenu>
Nhưng tất cả những nỗ lực này dẫn đến hành vi tương tự - khi giá trị null được chọn, nó được hiểu là sai.
Tôi đã sửa lỗi và theo dõi ngăn xếp Tôi đã tìm thấy vị trí xảy ra. Trong AstValue.setValue(EvaluationContext, Object) line: 204
nó gọi
ELSupport.coerceToType(value, targetClass)
tham số giá trị là null và targetClass là Boolean. Phương thức coerceToType này sau đó trả về false.
Bất kỳ ý tưởng nào về cách giải quyết vấn đề này? Cảm ơn!
chữ ký của phương pháp() setRegistrationComplete là gì? Loại đối số là gì? Boolean hoặc boolean? – prageeth
@prageeth: OP đã nêu rõ 'Boolean'. – BalusC
@prageeth là bộ trống công cộng được hoàn thành (Boolean registrationComplete). Và lĩnh vực đăng kýComplete là Boolean – lukas