为什么 selectOneMenu 将 ItemLabel 发送到转换器?

2024-02-06

我的 JSF 页面


<h:form>
   <h:selectOneMenu id="studlist" value="#{studBean.selectedStudent}">                   
     <p:ajax event="change" process="studlist" update="studdep" ></p:ajax>
     <f:selectItems value="#{studBean.student}" var="s" 
                    itemValue="#{s.studid}" itemLabel="#{s.name}"/>
     <f:converter   converterId="studentconverter"/>
     </h:selectOneMenu>
</h:form>

转换器类(StudentConverter)


public Object getAsObject(FacesContext context, UIComponent component, String value) {

 Student studConvert= new Student();
 List<Student> students=new ArrayList<Student>();
 students=(ArrayList<Student>)((UISelectItems     
           component.getChildren().get(0)).getValue();
}

在此转换器上,参数“字符串值”给出 itemLabel 我为什么会这样? 我想要这个字符串上的 itemValue


我不知道为什么你得到的是项目标签而不是里面的项目值getAsObject()。也许你的getAsString()做错了,它根据学生 ID 返回学生姓名。

无论如何,我可以告诉你,你的itemValue肯定是不对的。

<h:selectOneMenu id="studlist" value="#{studBean.selectedStudent}">  
    <f:selectItems value="#{studBean.student}" var="s" 
        itemValue="#{s.studid}" itemLabel="#{s.name}" />
    <f:converter converterId="studentconverter" />
</h:selectOneMenu>

转换器旨在用于在复杂的 Java 对象和 String 表示形式之间进行转换,以便它可以作为 HTTP 请求参数进行传递。但是,您将学生 ID 指定为项目值而不是整个学生对象。您需要指定整个学生对象。您还应该确保#{studBean.selectedStudent}指的是Student财产,而不是某些Long代表学生 ID 的属性。

当您修复itemValue如下:

<h:selectOneMenu id="studlist" value="#{studBean.selectedStudent}">  
    <f:selectItems value="#{studBean.student}" var="s" 
        itemValue="#{s}" itemLabel="#{s.name}" />
    <f:converter converterId="studentconverter" />
</h:selectOneMenu>

和你的转换器如下(省略了简单的空检查):

public String getAsString(FacesContext context, UIComponent component, Object value) {
    // This method is called when item value is to be converted to HTTP request parameter.
    // Normal practice is to return an unique identifier here, such as student ID.
    Student student = (Student) value;
    Long id = student.getStudid();
    return String.valueOf(id);
}

public Object getAsObject(FacesContext context, UIComponent component, String value) {
    // This method is called when HTTP request parameter is to be converted to item value.
    // You need to convert the student ID back to Student.
    Long id = Long.valueOf(value);
    Student student = someStudentService.find(id);
    return student;
}

那么它应该可以工作。

或者,您可以保留您的itemValue就像你最初一样并删除<f:converter>完全,但你必须改变#{studBean.selectedStudent}指向一个Long代表学生 ID 的属性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 selectOneMenu 将 ItemLabel 发送到转换器? 的相关文章

随机推荐

  • 获取当前活动 Xamarin 表单

    我使用 Leadtools SDK 进行条码阅读器 当我尝试获取当前活动时 它给我 null 这是我的代码 Stream resourceStream new MemoryStream Droid MainActivity activity
  • Thymeleaf:如何使用 Thymeleaf 在 JavaScript 中使用布尔运算符

    我正在使用 thymeleaf 在 javascript 中使用th inline javascript 但是当我们在 javascript thymeleaf 中添加布尔条件时 会抛出异常 如下所示 org xml sax SAXPars
  • 如何修复这个批处理文件? (打字机效果)

    我想让批处理脚本具有打字机风格 效果 同时删除文件并显示回声和其他内容 我希望它看起来像这样 Write1 echo Deleting Prefetches del s q C Windows Prefetch JAVAW pf echo
  • 在运行时根据请求参数创建EF Core DbContext

    背景 我们正在使用 ASP Net Core 和 Entity Framework Core 2 2 构建一个 Web 应用程序 我们正在连接到旧数据库 设置是有 16 个数据库 全部具有完全相同的架构 保存不同的上下文数据 我们无法改变这
  • Ctrl+M 使用 Sublime+Linux 运行 Makefile

    我目前正在考虑从 Pluma 以前的 gEdit 切换到 Sublime Text 到目前为止 我从 Sublime Text 中看到的内容非常好 I currently test Submlime Text 2 and would lik
  • 为什么 C 类型泛型表达式不能与 C++ 兼容?

    我似乎记得从一些可靠来源 即委员会成员在非官方渠道中发言 听到过模糊的评论 即 C 类型泛型表达式不会添加到 C 中 因为它们不能添加 据我所知 与 C 模板和重载相比 类型泛型表达式非常有限 但不存在需要定义为特殊情况的交互潜力 类型通用
  • 扩展实体

    我有一个名为 AbstractEntity 的类 它用 MappedSuperclass 进行注释 然后我有一个名为 User Entity 的类 它扩展了 AbstractEntity 这两个都存在于名为 foo bar framewor
  • 在向 COM 公开的 C# 对象上实现 ISupportErrorInfo

    我正在用 C 编写一个 COM 对象 我想使用它理解的机制 Err 对象 向 vba asp 客户端软件引发错误 在过去的好日子里 这意味着在 COM 对象上实现 ISupportErrorInfo 但我找不到任何有关如何在 C 对象中实现
  • 如何在selenium中按类名查找元素?

    在selenium中通过类名查找元素的语法是什么 请注意 我已经使用了以下语法 link elements driver find elements by class name BM30N 它给了我以下错误 C Users David De
  • iOS6大量下载超时

    看起来 iOS6 上使用 ASIHTTPRequest 的所有大型下载都会超时 有谁知道有任何 fork 已经为 iOS6 更新了这个库吗 我喜欢这个库并且真的不想切换 EDIT 此问题并非 ASIHTTPRequest 特有的 在测试 F
  • Django 1.2.4 CSRF验证失败

    当我执行 POST 表单时 Django 1 2 始终给我这个 CSRF 验证错误 我 认为 我已经完成了 Django 1 2 文档中要求的所有事情 即 确保 MIDDLEWARE CLASSES 包含在 django middlewar
  • SweetAlert确认对话框与asp.net listview删除?

    请帮我理解这一点 我创建了一个 ListView 显示来自 SQL 数据库的数据 我已经启用了插入 编辑和删除功能 一切正常 我想要什么 我想用SweetAlert http t4t5 github io sweetalert 提示用户确认
  • 遵循视图模型模式的最佳实践

    我现在正在学习 ASP NET MVC 一段时间 我遵循在互联网或书籍中找到的一些指南 并且我想确保在我的开发中遵循有关视图模型模式的良好实践 下面是一个博客实现的简单示例 您能否确认我走的路是正确的 假设我想在视图上显示帖子标题 描述 并
  • 最大 MQTT 连接数

    我需要创建一个服务器场 可以处理 5 100 万个连接 5 00000 个主题 每个客户端一个 每秒处理 300k 消息 我尝试了解各种消息代理的功能 因此我目前使用两个 RHEL EC2 实例 r3 4xlarge 来获取大量可用资源 所
  • Highcharts.js 设置更改列颜色的阈值

    我想知道是否有人可以帮助我调整这个 Highcharts 线图 http jsfiddle net highcharts PMyHQ http jsfiddle net highcharts PMyHQ 到柱形图WHILE仍然保持阈值着色
  • 将多列表转换为两列表

    让我们假设我想分析格鲁吉亚 国家 不同地区 城市的旅游游客 这里很容易从以下网站获取数据 https www geostat ge en modules categories 101 domestic tourism https www g
  • 如何使用邮递员测试获得代码覆盖率

    我们在 RestEasy 中创建了 REST 服务 并在 Wildfly 服务器中运行 我们正在运行 Postman 测试用例来测试 Rest URL 当我们执行邮递员测试套件时 有没有办法获得服务的代码覆盖率 我们使用SonarQube来
  • 如何将数据追加到 Excel 工作表列中?

    我有包含一些数据的现有 Excel 文件 我想将数据附加到其中 在此输入图像描述 1 try xlApp new Excel Application xlWorkBook xlApp Workbooks Add misValue xlWor
  • 为什么我的 Google OAuth URL 在返回的 URL 中放置了哈希值?

    给定的网址 返回网址 如果返回 URL 完全有效 更改为 开始查询字符串 为什么谷歌要归还 因此 杀死查询字符串 单独说明 另外 我不太知道我是否应该提出要求token or code作为响应类型 我计划让用户将他们的 Google 云端硬
  • 为什么 selectOneMenu 将 ItemLabel 发送到转换器?

    我的 JSF 页面