java holder 遍历_复合组件editableValueHolder与Bean验证不一致
我有以下復合組件:
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:composite="http://java.sun.com/jsf/composite"
>
以及托管bean
import java.util.Date;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.validation.constraints.NotNull;
@ViewScoped
@ManagedBean
public class TestMB {
@NotNull
private Date value;
public String action1() {
System.out.println("The value is: " + value);
return null;
}
public Date getValue() {
return value;
}
public void setValue(Date value) {
this.value = value;
}
}
以下定制轉換器:
import java.util.Date;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
@FacesConverter("myCustomConverter")
public class MyCustomConverter implements Converter {
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String value) {
if (value == null || "".equals(value)) {
return null;
}
return new Date();
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object obj) {
if (obj == null) {
return null;
}
return obj.toString();
}
}
以下測試頁面:
Enter value:
當我運行Web應用程序并將文本字段留空并點擊提交按鈕時,不會引發驗證錯誤,我在Java控制臺上獲得以下內容:
The value is: null
為了使事情變得更復雜,如果我按如下方式修改我的復合組件(我將值=“#”添加到h:inputText
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:composite="http://java.sun.com/jsf/composite"
>
并在設置NO值時再次嘗試提交表單,我沒有在頁面上顯示任何驗證錯誤,但我在控制臺中收到以下警告:
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=myID:value[severity=(ERROR 2), summary=(may not be null), detail=(may not be null)]
然后,如果我再次嘗試重新提交表單,則即使字段為空,也會提交操作 . 我在控制臺中獲得以下內容:
The value is: null
但是,如果我刪除 id="myID" 一切都OK!
Finally: 如果我在表單上設置prependId = "false",一切正常 .
但我不想設置prependId =“false”,我確實需要設置ID :(
總結
以上是生活随笔為你收集整理的java holder 遍历_复合组件editableValueHolder与Bean验证不一致的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java ee io_JAVAEE细细看
- 下一篇: java 的“mwq”_java的对象模