使用 pojo 自动完成 primefaces

2024-02-15

我读过一些关于同一组件的质量检查,但我觉得我错过了一些东西,因为我落后了一步。 当我使用 primefaces 自动完成组件时,我什至无法打开页面。 它的片段是:

<p:autoComplete value="#{indirizzoCtrl.selectedCodiceNazione}"  
            completeMethod="#{indirizzoCtrl.completeNazione}"  
            var="nazione" itemLabel="#{nazione.nome}"   
            itemValue="#{nazione.codiceNazione}" />

Nazione 是一个 Pojo 类,其中CodiceNazione and Nome are两个字符串字段(肯定有 getter 和 setter)。completeNazione是 ManagedBean 上的一个方法,它返回List<Nazione>。 看BalusC的解释here https://stackoverflow.com/a/7653775/333223,在我看来,我不需要涉及任何转换器,因为 itemValue 和 value 属性都映射到字符串属性。 无论如何,当我打开包含此自动完成片段的页面时,它会因以下错误而崩溃:

javax.el.PropertyNotFoundException: /Cliente/Indirizzo.xhtml @23,56 itemValue="#{nazione.codiceNazione}": itemValue="#{nazione.codiceNazione}": Property 'codiceNazione' not found on type java.lang.String

为什么会发生这种情况?我实在是看不懂了。 CompleteNazione 方法还没有被调用,所以它不应该知道任何Nazione然而。 它出什么问题了?

Edited:按照建议,我尝试添加转换器,但仍然遇到相同的错误。 这是我的转换器:

    public class NazioneConverter implements Converter {

    final static Logger log = Logger.getLogger(NazioneConverter.class);

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        if (value.trim().equals("")) {  
            return null;  
        } else {  
            try {  
                IndirizzoRepository ir = new IndirizzoRepository();
                List<Nazione> nazioni = ir.getNazioneByName(value);
                if (nazioni.size()==1) return nazioni.get(0);
                else throw new Exception();

            } catch (Exception e) {
                String msg = "Errore di conversione";
                log.error(msg, e);
                throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, "Non è una nazione conosciuta"));  
            }  
        }          
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        if (value == null || value.equals("")) {  
            return "";  
        } else {  
            return String.valueOf(((Nazione) value).getNome());  
        } 
    }

}

现在视图中的组件如下所示:

<p:autoComplete value="#{indirizzoCtrl.indirizzo.nazione.codiceNazione}"  
            completeMethod="#{indirizzoCtrl.completeNazione}"  
            var="nazione" itemLabel="#{nazione.nome}" converter="#{nazioneConverter}"
            itemValue="#{nazione.codiceNazione}" forceSelection="true"  />

但还是不行。转换器甚至没有被调用:我在 faces-config.xml 文件中注册了它。 我还尝试了 itemValue="#{nazione}" 就像 primefaces 展示中那样,但问题变成了ItemLabel属性,映射到nazione.nome。 我究竟做错了什么?


这对我有用:

//Converter
@FacesConverter(value="MarcaConverter")
public class MarcaConverter implements Converter{
    MarcaDAO marcaDAO;
    public Object getAsObject(FacesContext contet, UIComponent component, String value) {
        if(value==null || value.equals(""))
            return null;
        try{
            int id = Integer.parseInt(value);
            return marcaDAO.findMarcaById(id);
        }catch (Exception e) {
            e.printStackTrace();
            throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Marca no válida", ""));
        }
    }

    public String getAsString(FacesContext contet, UIComponent component, Object value) {
        if(value==null || value.equals(""))
            return null;
        return String.valueOf(((Marca)value).getCodigoMarca());
    }
}




//--------------------------------------
//Bean
@ManagedBean
@ViewScoped
public class MyBeans implements Serializable{
    private Marca marca;
    ...
    public Marca getMarca(){
        return marca;
    }
    public void setMarca(Marca m){
        marca=m;
    }
    ...
    public List<Marca> obtenerMarcasVehiculos(String s) {
        List<Marca> marcas,smarcas=new ArrayList<Marca>();
        try{
            marcas= marcaDAO.findAllMarcas();
            if(s.trim().equals("")) return marcas;
            for(Marca m:marcas)
                if (m.getNombreMarca().toString().contains(s) || m.getNombreMarca().toLowerCase().contains(s.toLowerCase())) {
                    smarcas.add(m);
                }
            return smarcas;
        }catch(Exception e){
            //JsfUtil.showFacesMsg(e,"Error al obtener las marcas de veh&iacute;culos","",FacesMessage.SEVERITY_WARN);
            e.printStackTrace();
            JsfUtil.lanzarException(e);
            return null;
        }
    }


//-----------------------------------------
//*.xhtml page
...
    <p:autoComplete 
       id="cbxMarca" value="#{myBean.marca}" size="40"
       converter="MarcaConverter"
       completeMethod="#{myBean.obtenerMarcasVehiculos}"
       var="m" itemLabel="#{m.nombreMarca}" itemValue="#{m}"
       forceSelection="true" dropdown="true"
       required="true" scrollHeight="200">
    </p:autoComplete>
...

//-----------------------------------------
//Class Marca
public class Marca implements Serializable{
       private static final long serialVersionUID = 1L;

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

使用 pojo 自动完成 primefaces 的相关文章

随机推荐

  • 使用 docker compose 在 Amazon ECS 上部署应用程序

    我正在尝试将具有多个服务的 docker 容器部署到 ECS 我一直在关注这篇文章 看起来很棒 https aws amazon com blogs containers deploy applications on amazon ecs
  • 使用 Nexus3 API 如何获取存储库中的工件列表

    我们正在从 Nexus Repository Manager 2 1 4 迁移到 Nexus 3 1 0 04 在版本 2 中 我们已经能够使用 API 按存储库获取工件列表 但是我们正在努力寻找一种使用 Nexus 3 API 来实现此目
  • Android NDK 应用程序无法加载库

    我的本机库代码 include
  • jQuery 将复选框中的值附加到文本区域并从中删除值

    我正在尝试将复选框的值附加或删除到文本区域 我尝试使用以下代码 该代码适用于文本框 但不适用于文本区域 另外 它只是添加有关单击功能的信息 而不是检查功能的信息 任何人都可以帮我编写代码 在选中时将选项值添加到文本区域 而不是文本框 并在取
  • IOS:NSString 从字符串中检索子字符串

    嘿 我正在寻找一种从另一个字符串中提取字符串的方法 它可以是任何长度并且位于字符串的任何部分 因此通常的方法不起作用 例如 我要提取的是从 id 到下一个 有任何想法吗 使用 rangeOfString 方法 NSRange range s
  • 使用显式实例化设置类模板的方法

    问完后这个问题 https stackoverflow com questions 3526299 c templates declare in h define in hpp并阅读了大量有关模板的内容 我想知道以下类模板设置是否有意义 我
  • 将多个内核缓冲区映射到连续的用户空间缓冲区?

    我已经使用分配了多个内核可访问的缓冲区dma alloc coherent 每个大小为 4MiB 目标是将这些缓冲区映射到连续的用户空间虚拟内存中 问题是remap pfn range似乎不起作用 因为用户空间内存有时工作 有时不工作 或者
  • 卸载仍有实例的 kext

    我正在更新其中一台设备的驱动程序 并希望 kextunload 旧驱动程序并 kextload 新驱动程序 这样就不再需要重新启动 安装后我尝试 sudo kextunload System Library Extensions Drive
  • Drupal 7 Forms API - AJAX Forms 错误:检测到非法选择。请联系网站管理员

    我设置了一个表单 用户可以从下拉列表中选择一个项目 一旦选择该项目 就会填充另一个下拉列表 然后 根据从第二个下拉列表中选择的值 可能会或可能不会显示字段集 如果显示字段集 则有一个字段和一个按钮 通过单击该按钮 您可以添加同一字段的另一个
  • 如何使用 String ReplaceAll 在出现某些字符时不进行替换

    我需要替换文本中的一些单词 但我需要在替换策略中添加条件 如下所示 我想更换word1 with word2 String word1 word1 String word2 word2 但我不想更换word1如果它前面是word3这是 St
  • ${authAdminUrl} 从哪里来以及如何操作它?

    我正在尝试设置一个 dockerized keycloak 实例 但成功登录后 其 安全管理控制台 不断将我重定向到内部 URL 而不是我在 dns 中设置的 URL 查看设置 其根 URL 设置为 authAdminUrl 我可以用实际的
  • List 或 ArrayList 有什么用

    我想知道有什么用List
  • 将 const char* 返回到 char*,然后更改数据

    我对以下代码感到困惑 string str SDFDFSD char pStr char str data for int i 0 i lt iSize i pStr i tolower pStr i here str data 回报con
  • ZeroMQ 多线程:按需创建套接字还是使用套接字对象池?

    我正在利用 ZeroMQ N to N 发布 订阅模型构建一个 POC 在我们的应用服务器中 当处理 http 请求时 如果线程从数据库中提取数据 它就会使用该数据更新本地 memcache 实例 为了同步应用程序服务器集群中的其他 mem
  • Haskell N 叉树遍历

    我对 Haskell 还很陌生 我正在尝试找出如何遍历 n 叉树 作为输出 我希望获得叶值列表 因为分支没有值 因此对于 testtree 这将是 4 5 到目前为止我的定义是 data Tree a Leaf a Branch Tree
  • 替换 Fragment 时出现 IllegalStateException

    它是使用兼容性包的小型 Android 2 2 测试应用程序 这是我在收到点击时尝试替换片段的 当然是错误的 方法 我试图用同一 Fragment 类的新 不同 实例替换它 正如我将解释的那样 它无法按预期工作 我需要帮助 public c
  • 两个类里面的代码几乎重复

    此时此刻 我有两节课 UserHibernateDao and TicketHibernateDao import java util List import org springframework orm hibernate3 suppo
  • 如何转义 SQLite FTS 查询的字符串

    我正在尝试使用不受信任的用户输入执行 SQLite FTS 查询 我不想让用户访问查询语法 也就是说他们将无法执行类似的匹配查询foo OR bar AND cats 如果他们尝试使用该字符串进行查询 我想将其解释为更像是foo OR ba
  • Android 网络提供商,需要互联网吗?

    我正在使用网络提供商进行位置更新 我的手机需要联网吗 这是我的代码 LocationMngr LocationManager getSystemService Context LOCATION SERVICE LocationMngr re
  • 使用 pojo 自动完成 primefaces

    我读过一些关于同一组件的质量检查 但我觉得我错过了一些东西 因为我落后了一步 当我使用 primefaces 自动完成组件时 我什至无法打开页面 它的片段是