Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 是否可以在Java服务器中创建只写字段绑定?_Jsf_Jakarta Ee - Fatal编程技术网

Jsf 是否可以在Java服务器中创建只写字段绑定?

Jsf 是否可以在Java服务器中创建只写字段绑定?,jsf,jakarta-ee,Jsf,Jakarta Ee,我正在JSF中创建一个表单来保存一个新的实体bean。我使用value属性将新实体的属性绑定到输入元素,例如,其中backingbean是JSF管理的mean,newEntity是backingbean的文件,其中包含我实体的新实例。对于值类型(如数字)的属性,输入字段将填充默认值(例如0)。我希望所有字段最初都为空,并在提交页面时保存回新的实体实例。我想我可以通过使用Integer之类的类型使所有属性都可以为null,但是数据库中的值不能为null,而且我的用户界面的要求似乎不应该规定按业务层

我正在JSF中创建一个表单来保存一个新的实体bean。我使用value属性将新实体的属性绑定到输入元素,例如,其中backingbean是JSF管理的mean,newEntity是backingbean的文件,其中包含我实体的新实例。对于值类型(如数字)的属性,输入字段将填充默认值(例如0)。我希望所有字段最初都为空,并在提交页面时保存回新的实体实例。我想我可以通过使用Integer之类的类型使所有属性都可以为null,但是数据库中的值不能为null,而且我的用户界面的要求似乎不应该规定按业务层的形式。我看错了吗?

我假设如果字段不可为空,那么它们是必需的。如果将
required=“true”
放在字段上,则在分配值之前验证应失败。这意味着它不会尝试为属性分配空值。对于某些类型的字段,您可能需要编写一个自定义验证器来执行此操作

或者,您可以编写一个转换器。此转换器必须将空值转换为一些预先确定的常量,如您知道无效的-1。反之亦然,它必须将-1转换为空值才能显示。然后,在将其发送到业务层之前,必须处理所有无效值


这两种方法我都用过,但我更喜欢第一种。如果这些字段不是必需的,那么它们在业务层中应该可以为空。

第二种方法对我来说不是选项,因为一般来说,并不总是可以保留一个值来表示无效状态。第一种方法有效,如前所述,验证可以添加到ui中,但在数据输入以外的上下文中,例如,当现有对象出于引用目的从数据库中加载时,属性永远不能为null,因此数据库中不为null的字段似乎不应为null类型,以便明确哪些字段为null我的想法是,在编辑新记录的情况下,我们可以利用这样一个事实,即我们知道记录是新的,并且在呈现给用户之前不会将ui控件与实体同步。也许这可以通过自定义转换器来实现,自定义转换器以某种方式接收一个标志,告诉它们仅以一种方式将数据从控件移动到实体。但也许这太复杂了,人们应该只使用可为空的字段,然后使用它。一个带有标志的自定义转换器可以工作。主要的缺点是您必须将它放在每个输入组件上,我相信JSF2.0中的新复合标记将使您能够创建一个使用自定义转换器的自定义输入标记。如果您还没有找到复合标记,那么它值得一看。在JSF2之前,我认为您必须创建一些不同的文件,包括一些java来创建一个可重用的组件,现在您可以在一个fie中使用facelets标记。