当前位置: 首页 > 知识库问答 >
问题:

在Spring中使用表达式语言时出错

姬成荫
2023-03-14

无法将属性“Item”的类型[java.lang.String]的属性值转换为所需的类型[com.spring.first.Item];嵌套异常为java.lang.IllegalArgumentException:无法将属性“Item”的类型[java.lang.String]的值转换为所需的类型[com.spring.first.Item]:未找到匹配的编辑器或转换策略

server.java

package com.spring.first;
public class Server {
    private Item item;
    private String itemName;
    public Item getItem()
    {
        return item; 
    }

    public String getItemName()
    {
        return itemName;
    }
    public void setItem(Item item)
    {
        this.item=item;
    }
    public void setItemName(String str)
    {
        this.itemName=str;
    }
    @Override
    public String toString()
    {
        return "Server [item ="+item+", itemName ="+itemName+"]";
    }
}

Item.java

public class Item {
    private String name;
    private int qty;
    public String getName()
    {
        return name;
    }
    public int getQty()
    {
        return qty;
    }
    public void setName(String name)
    {
        this.name=name;
    }
    public void setQty(int x)
    {
        this.qty=x;
    }
    @Override
    public String toString()
    {
        return "Item [ name ="+name+", Qty ="+qty+"];";
    }

}

我的配置文件

<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<bean id="itemBean" class="com.spring.first.Item">
        <property name="name" value="itemA" />
        <property name="qty" value="10" />
    </bean>
    <bean id="serverBean" class="com.spring.first.Server">
        <property name="item" value="#{itemBean}" />
        <property name="itemName" value="#{itemBean.name}" />
    </bean>

</beans>

我使用的是Spring2.5.6。

共有2个答案

金承嗣
2023-03-14

尝试按如下方式更改配置文件

<bean id="itemBean" class="com.spring.first.Item">
    <property name="name" value="itemA" />
    <property name="qty" value="10" />
</bean>
<bean id="serverBean" class="com.spring.first.Server">
    <property name="item" ref="itemBean" />
    <property name="itemName" value="itemBean.name" />
</bean>
段劲
2023-03-14

Spring出口语言 (SPEL) 是在Spring 3 中引入的(请参阅Spring 3 中引入的新功能),因此无法在Spring 2.5.6 中使用 SPEL。

您需要将Spring版本升级到至少3(最好的是最新版本,目前是4.2.2)。您拥有的配置是正确的,并且可以工作(请参阅 SPEL 参考)。

 类似资料:
  • 本文章将介绍Thymeleaf Spring表达式语法中的概念。 Spring Expression Language(简称SpEL)是一种强大的表达式语言,支持在运行时查询和操作对象图。 语言语法类似于Unified EL,但提供了额外的功能,特别是方法调用和基本的字符串模板功能。 Spring表达式语言的创建旨在为Spring社区提供单一支持的表达式语言。 它的语言特性是由Spring项目中的

  • 主要内容:示例,SpEL对Bean定义的支持,SpEL中的运算符,SpEL中的变量Spring Expression Language(简称 SpEL)是一种功能强大的表达式语言,支持运行时查询和操作对象图 。表达式语言一般是用最简单的形式完成最主要的工作,以此减少工作量。 Java 有许多可用的表达式语言,例如 JSP EL,OGNL,MVEL 和 JBoss EL,SpEL 语法类似于 JSP EL,功能类似于 Struts2 中的 OGNL,能在运行时构建复杂表达式、存取

  • 我正在使用带咖啡因缓存的Spring boot。我的缓存键是一个长的,我需要这个键,例如:“1234-RULE”,其中1234是长对象,-RULE只是一个后缀。我尝试了以下方法来实现这一点: 调试时,我发现错误: 我的规则。id很长,我用来表示id和后缀的表达式似乎不正确。你能告诉我如何在我的用例中使用长字符串吗。

  • 问题内容: 我有一个简单的Spring Bean表达式,当我在应用程序上下文文件中定义它时,它的计算效果很好: 现在,我想以编程方式进行相同的评估。我使用了以下代码: 抛出一个异常: 我想我必须以某种方式设置一个根对象,该根对象允许像属性一样配置的bean。但是我还没有开始工作。任何人都已经这样做并且可以提供提示了吗? 问题答案: 实现BeanFactoryAware以获得对bean工厂的引用;然

  • 我想使用SpEL来评估一些谓词。由于值/属性是动态的,我没有某个bean类。因此,我们有一个hashmap,其中(根据应用状态)键映射到不同的POJO/bean,例如: 我们希望通过设置变量来使用评估上下文,比如: 但这带来了一个例外: SpelEvaluationException:EL1007E:(位置0):在null上找不到属性或字段“person” 有人给我建议吗?