当属性无法唯一识别时如何使用 JSF Converter
在我的 JSF 页面中,我有一个
,必须通过从列表中选择一个对象来填充它。对象的id
没有任何有用的意义,所以我必须编写一个Converter
将其更改为可读的字符串。
不幸的是,对象的字符串表示形式无法唯一标识不同的对象,因此转换是不可逆的。现在我想知道如何解决这个问题?是否可以将所选对象的 id
存储到
中并将其传递给视图范围的支持 bean?
In my JSF page, I have a <rich:autocomplete/>
which must be filled by selecting an object from the list. The id
of the object does not have useful meaning, so I have to write a Converter
to change it to readable string.
Unfortunately the string representation of the object could not uniquely identify different objects and so the conversion is not reversible. Now I want to know how I could solve this problem? Is it possible to store the id
of the selected object into a <h:inputHidden>
and pass it to the view scoped backing bean?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您使用输入组件和转换器的方式错误。显然,您正在使用对象的字符串表示形式(项目标签)作为输入值,而您应该使用对象的唯一标识符(项目值)作为输入值。转换器仅在自定义对象和唯一标识符之间进行转换,而不是在自定义对象和字符串表示形式之间进行转换。
You're using the input component and the converter the wrong way. You are apparently using the object's string representation (the item label) as input value, while you should be using the object's unique identifier (the item value) as input value. The converter is merely to convert between the custom object and the unique identifier, not between the custom object and the string representation.
我已经搜索过这个,直到目前 rich:component 没有提供直接的解决方案,因为它没有像 rich:select 这样的 itemValue
另外还有 2 个解决方案。
使用 JavaScript 将所选项目的 id 值添加到
隐藏字段,然后使用该隐藏字段来识别
所选项目
我使用 fetchValue 属性来连接 item_id - item_name
然后我创建了一个转换器,它对 item_id 进行子串以识别
所选项目。
I have searched this and until the moment there are no direct solution provided by the rich:component as it does not has itemValue like rich:select
Also there are 2 workaround solution.
to use JavaScript to add the id value of the selected item to a
hidden field and then use this hidden field to identify the
selected item
I used the fetchValue attribute to concat item_id - item_name
then I created a converter which substring the item_id to identify
the selected item.