FacesConverter forClass 不适用于复合组件

2024-01-02

我有一个简单的复合组件,它必须呈现输入文本。当输入值并按下命令按钮时,会引发以下异常:

java.lang.IllegalArgumentException: Cannot convert 1 of type class java.lang.String to class sample.entity.Product

当我使用 h:inputText 而不是 d:myInputText 时,它工作正常。

是否可以对复合组件使用 FacesConverter 和 forClass 属性?我不喜欢使用标签 f:converter 的转换器属性或转换器 ID。 有人帮助我吗?

页面代码:

<h:form>
  <h:messages />
  Product Id: <h:myInputText value="#{productController.product}"/>
  <h:commandButton value="Submit" action="#{productController.someAction()}" />
  Product Description: <h:outputText value="#{productController.product.description}"/>
</h:form>

复合代码:

<composite:interface>
   <composite:attribute name="value"/>
   <composite:editableValueHolder name="value" targets="#{cc.clientId}:value"/>
</composite:interface>

<composite:implementation>
   <div id="#{cc.clientId}">
      <h:inputText id="value" value="#{cc.attrs.value}"/>
      <h:message for="#{cc.clientId}:value" />
    </div>
</composite:implementation>

托管Bean代码:

@Named("productController")
@RequestScoped
public class ProductController {

  private Product product;

  public Product getProduct() {
    if (product == null) {
        product = new Product();
    }
    return product;
  }

  public void setProduct(Product product) {
    this.product = product;
  }

  public void someAction() {
    System.out.println("Product " + product);
  }
}

转换器代码:

@FacesConverter(forClass = Product.class)
public class ProductConverter implements Converter {

  @Override
  public Object getAsObject(FacesContext fc, UIComponent uic, String value) {
    System.out.println("[DEBUG] getAsObject: " + value);
    if (value == null || "".equals(value)) {
        return null;
    }
    //TODO: some logic to get entity from database.
    return new Product(new Long(value));
  }

  @Override
  public String getAsString(FacesContext fc, UIComponent uic, Object o) {
    System.out.println("[DEBUG] getAsString: " + o);
    if (o == null) {
        return null;
    }
    return String.valueOf(((Product) o).getId());
  }
}

实体代码:

 public class Product {

      private Long id;
      private String description;

      public Product() {
      }

  public Product(Long id) {
    this.id = id;
  }

  public Long getId() {
    return id;
  }

  public void setId(Long id) {
    this.id = id;
  }

  public String getDescription() {
    return description;
  }

  public void setDescription(String description) {
    this.description = description;
  }

  @Override
  public int hashCode() {
    int hash = 7;
    hash = 29 * hash + (this.id != null ? this.id.hashCode() : 0);
    return hash;
  }

  @Override
  public boolean equals(Object obj) {
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    final Product other = (Product) obj;
    if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
        return false;
    }
    return true;
  }

  @Override
  public String toString() {
    return "Product{" + "id=" + id + '}';
  }
}

我使用 Mojarra 2.1.14、Glassfish 3.1 和 CDI。 此致。


我能够在 Mojarra 2.1.14 中重现它。这是 Mojarra 中的一个错误。它在 MyFaces 2.1.9 中运行良好。我已将其报告给 Mojarra 人员第2568期 https://github.com/eclipse-ee4j/mojarra/issues/2572。与此同时,除了显式指定一个<f:converter for>在客户端或迁移到 MyFaces(不过它也有自己的一组特定的怪癖/问题)。

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

FacesConverter forClass 不适用于复合组件 的相关文章

随机推荐

  • 向 Swift 2 中的类添加“for...in”支持

    这个问题 https stackoverflow com questions 24099227 add for in support to iterate over swift custom classes早期版本的 Swift 已经得到了
  • 如何在 Swift 中发出 NSURLSession POST 请求

    你好 我是 Swift 的初学者 我正在尝试让 NSURLSession Post 请求发送一些参数 如下面的代码 根据我的下面的代码响应不是来自服务器 有人可以帮助我吗 背景类别 import UIKit protocol sampleP
  • 致命的 Python 错误:无法从堆栈溢出中恢复

    我在互联网上读到类似的问题 但没有一个答案可以帮助我 我有一个函数 对于每一行数据 数据大约有 2 000 000 行 执行一些操作 然后根据它所做的操作使用不同的参数调用相同的函数 问题是 过了一会儿 我在终端中收到此错误 致命的 Pyt
  • nvd3 工具提示十进制格式

    我正在使用 nvd3 显示折线图 格式化工具提示内容时遇到一些问题 这是我用来设置 y 轴文本格式的行 chart1 yAxis tickFormat d3 format 02f 但是 它仅对 y 轴有效 如果有一个像 44 123231
  • android startActivity 来自服务中的意图[重复]

    这个问题在这里已经有答案了 我尝试在服务中使用意图 但是当我尝试这样做时 Intent intent facebook new Intent this MainUploadToYoutube class intent facebook pu
  • Instagram新API,通过标签获取项目

    上个月 Instagram API 更新了 我不明白如何使用它 例如我想通过标签获取图像nexus5x 我确实请求https api instagram com v1 tags nexus5x access token access tok
  • 将背景图像 (SVG) 拉伸至 100% 宽度和 100% 高度?

    我想要实现的行为是宽度background size cover 但高度为background size contain 通过拉伸图像 我以为background size 100 应该这样做 但看看这个例子 它没有 container b
  • 使用 include 动态指向 HTML

    我想基于变量指向不同的 HTML 文件 我使用以下格式的 include include templates case cid intro html 这会引发错误 TemplateNotFound templates case cid in
  • Oracle ojdbc8 12.2.0.1 被 Maven 禁止

    Oracle ojdbc8 12 2 0 1禁止自 2017 年 12 月起由 Maven 提供 在此之前效果良好 Oracle 存储库 setting xml 上的哪些配置已更改 Maven 项目 https github com sgr
  • 使用不同的 JSON 对象填充 ViewPager 中的每个片段,而无需再次加载

    我有一个ViewPager有一个Fragment其中包含一个 GridView仅当我延迟滚动页面并且每次再次从互联网检索内容时 我的代码才能正常工作我想做的只是获取每个页面内容一次并在用户滚动页面时使用它我的问题之一是 JSON 下载sim
  • swift中的dispatch_group_leave崩溃

    这种情况很少发生 这是堆栈跟踪的最后一行 0 libdispatch dylib 0x0000000197a85a9c dispatch group leave 48 dispatch group leave 在一个完整的闭包中被调用 调用
  • 分组时覆盖箱线图中的下限、上限等

    默认情况下 对于下 中和上分位数geom boxplot考虑 25 50 和 75 分位数 这些是从计算得出的y 但可以通过美学参数手动设置lower upper middle 还提供x ymin and ymax和设置stat ident
  • 如何在 jUnit 测试用例中闯入调试器?

    我正在一个大型 java 项目中调试单元测试 我需要运行 ant test 来启动测试套件 所以我很难从 IDE 启动它 如果它附加到任何调试器 是否可以调用 C 中的 Debugger Break 之类的函数来中断调试器 如果我正确理解你
  • 子字符串并返回特定字符后的值

    测试 BSMain 文本 起始页 我想对上面的值进行子串并只返回后面的值 在 VB NET 中 我怎样才能做到这一点 假设没有错误检查 Dim phrase As String Testing BSMain Text Start Page
  • c fscanf 错误检查

    我正在使用 fscanf 从 C 中的文件中读取 我只是想知道我是否正确检查了所有错误条件 这是最可靠的方法 而且我没有遗漏任何内容 FILE fp char filename untitled int count char item1 1
  • Rust 中单元类型的用途是什么?

    铁锈具有单位类型 具有单个零大小值的类型 该单位类型的值也可以使用指定 单位类型及其值的目的是什么 这是一种避免使用的机制吗null or nil 像其他语言一样 是类型的值 它的目的就是无用 Rust 中的一切都是一个表达式 返回 not
  • Zip 文件上传到服务器时损坏

    我的 java 程序将 zip 文件从我的系统上传到 FTP 服务器 uploadfile 是一个包含上传代码的函数 uploadfile 192 168 0 210 muruganp vm4snk home Admin GATE521 L
  • 全日历结束日期错误一天

    我正在制作一个完整的日历支持的汽车预订功能 这是咖啡脚本文件 updateEvent event delta revertFunc gt ajax type PUT dataType json success data gt alert S
  • 声谱图

    我制作了一个应用程序 可以将 FFT 实时绘制到屏幕上 从麦克风 x 轴上的时间 y 轴上的频率和像素的颜色代表幅度 几乎是一个普通的 FFT 频谱图 我的问题是 即使我可以从音乐中看到模式 但也有很多噪音 谷歌搜索我看到人们对振幅应用对数
  • FacesConverter forClass 不适用于复合组件

    我有一个简单的复合组件 它必须呈现输入文本 当输入值并按下命令按钮时 会引发以下异常 java lang IllegalArgumentException Cannot convert 1 of type class java lang S