JSF页面如何获取LOV描述值而非存储的代码值
解决LOV描述文本作为参数传递的问题
嘿,这个需求我熟!我来给你几个靠谱的解决办法,帮你把LOV选中的友好描述文本传到另一个页面~
方法1:直接用ADF绑定的displayValue属性(最简单)
在ADF里,带LOV的属性绑定对象天生就有个displayValue属性,它就是前端显示的那个友好描述文本,完美对应你要的内容。
你只需要把原来属性监听器里的参数设置从:
="#{binding.myview.myattribute}"
改成:
="#{binding.myview.myattribute.displayValue}"
这样pageFlowScope.myParam里存的就是选中选项的描述文本,而不是底层的代码啦。
方法2:手动从LOV列表匹配描述(适配特殊配置)
如果因为LOV的特殊配置,displayValue没正常生效,那可以用EL表达式直接遍历LOV选项列表,找到对应代码的描述:
="#{binding.myview.myattribute.hints.lovList.stream().filter(item -> item.value eq binding.myview.myattribute.inputValue).findFirst().orElse(null).label}"
这段EL会自动从LOV的选项里,找到值等于当前存储代码的项,然后取出它的label(也就是描述文本)。
方法3:通过后台Managed Bean处理(更灵活)
要是你想通过Java代码更灵活地控制,也可以写个Managed Bean方法来获取描述:
public String getSelectedLovDescription() { // 获取绑定的属性对象 AttributeBinding attrBinding = (AttributeBinding) BindingContext.getCurrent() .getCurrentBindingsEntry().get("myattribute"); // 拿到显示的描述文本 if (attrBinding.getDisplayValue() != null) { return attrBinding.getDisplayValue().toString(); } return null; }
然后在监听器里引用这个方法就行:
="#{yourManagedBean.selectedLovDescription}"
额外小提示
- 确保你的VO里LOV配置是正确的:已经关联了代码字段(存储用)和描述字段(显示用),这样ADF才能正确识别并返回
displayValue。 - 如果是页面跳转时传参,也可以直接在导航规则里设置参数值为
#{binding.myview.myattribute.displayValue},不用额外加监听器哦。
内容的提问来源于stack exchange,提问作者user2924127
相关产品推荐
相关产品推荐

