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 :(

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值