Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
Java 需要一种策略来查找动态生成的下拉组件的属性_Java_Wicket - Fatal编程技术网

Java 需要一种策略来查找动态生成的下拉组件的属性

Java 需要一种策略来查找动态生成的下拉组件的属性,java,wicket,Java,Wicket,我需要为dropDownChoice组件设置空值字符串。空选择的默认值是“Choose One”,它是在Wicket AbstractSingleChoice类中硬编码的 通常的替代方法是定义属性资源 但是,我的DropdownChoice组件是在运行时动态生成的,并添加到面板(位于datatable中)。标记中未明确引用DropDownChoice 我正在寻找如何在这种情况下以编程方式重写默认空值字符串的建议。如果DropDownChoice构造函数对此有一个额外的参数就好了 我是否需要以编程

我需要为dropDownChoice组件设置空值字符串。空选择的默认值是“Choose One”,它是在Wicket AbstractSingleChoice类中硬编码的

通常的替代方法是定义属性资源

但是,我的DropdownChoice组件是在运行时动态生成的,并添加到面板(位于datatable中)。标记中未明确引用DropDownChoice

我正在寻找如何在这种情况下以编程方式重写默认空值字符串的建议。如果DropDownChoice构造函数对此有一个额外的参数就好了

我是否需要以编程方式创建新的属性资源

希望这是有意义的。

您可以重写和,以使Wicket从.properties或.xml文件中检索本地化的资源,该文件没有组件id作为密钥的一部分。本JIRA版本中记录了这一点:

例如:

DropDownChoice ddc = new DropDownChoice(id, model, choices){
   @Override
   protected String getNullKey(){ return "customDdcNullValue"; }
   @Override
   protected String getNullValidKey(){ return "customDdcNullValue"; }
}
将从
customDdcNullValue
属性中检索
的文本

这些方法似乎是在1.4.4版中添加的,如果您使用的是1.3版,则始终可以使用
IChoiceRenderer
DropDownChoice
,在
null
值的情况下返回正确的字符串。请注意,您可以从资源中检索它(使用
getString()
,或
StringResourceModel
),或者根据需要从数据库/缓存中获取值。这可能取决于您如何本地化非空值的选择

此外,您还可以使用的源代码使用此行为滚动您自己的
DropDownChoice

更新:另一种处理方法是提供自己的自定义值,表示
null
,或者没有选择。只需记住在
下拉选择上使用
setNullValid(false)
,以防止在存在选定值时出现
null
,并在您仍然不知道其值时使用未选择值初始化ddc的模型,以避免在
getDefaultChoice()中提供Wicket
null
打电话

定义“无选择”选项的值时,请特别注意以下部分:


考虑到
getNoSelectValue()
返回
-1
,因此请不要使用
-1
或空字符串作为自定义空值。相信我,这是我通过艰苦的方式学会的。这并不令人愉快。

你应该使用本地化功能来实现它。有一个方法
org.apache.wicket.resource.loader.IStringResourceLoader.loadStringResource(org.apache.wicket.Component,java.lang.String)
,它返回一个字符串值以显示给定组件。该字符串将是一个资源键,对于您的情况,它是“nullValid”字符串IIRC。
因此,您可以实现自定义资源管理器,它将从数据库而不是
.properties
文件中拾取数据。

回答得不错。我们的版本是1.4.17,DropDownChoice没有getNullKey方法。我认为它们是在1.4.18中添加的。事实上,进一步思考这个问题。我可以在选项列表中添加另一个选项,例如“未设置”?对不起,是的,你是对的。我理解你的建议。谢谢你的代码示例。实际上,Xavi,我将使用我的想法,在选项列表中添加一个额外的“使用默认值”。这条路对我来说阻力最小。“但我会接受你的回答,认为你的回答在技术上是正确的”。@AndrewFielden我已经更新了答案,现在考虑到了你的想法。请注意有关为“无选择”选项选择值的部分。不要使用空字符串或-1!使用
iChoiceRender
不是更容易吗?这将如何实施?它比ICHOICHERENDER有什么优势吗?嗯,不确定。也许IChoiceRenderer更容易处理特定问题。然而,IStringResourceLoader功能更强大,它可以为基于数据库的动态接口提供通用的解决方案。
// Null is not valid. Is it selected anyway?
if ((selected == null) || getNoSelectionValue().equals(selected) ||
      selected.equals(EMPTY_STRING))
{