【问题标题】:JSTL Treat String as Expression LanguageJSTL 将字符串视为表达式语言
【发布时间】:2014-07-23 23:56:06
【问题描述】:

我有一个 Teacher bean,其中包含他们希望如何查看学生姓名的名称格式。我正在使用 EL 访问字符串,如下所示。教师已在请求中设置。

<c:out value="${requestScope.teacher.nameFormat}"/>

名称格式的值是如下所示的表达式语言。

1. ${student.lastName}, ${student.firstName}
2. ${student.lastName}, ${student.firstName.substring(0,1)}

我希望使用老师选择的姓名格式显示学生姓名。

1. Doe, John
2. Doe, J.

但我现在得到的结果是名称格式本身。

1. ${student.lastName}, ${student.firstName}
2. ${student.lastName}, ${student.firstName.substring(0,1)}

【问题讨论】:

    标签: java jsp jakarta-ee jstl el


    【解决方案1】:

    在你的域中创建一个方法

    class Person{
    
      public String getPrettyName(){
        //operate and return
      }
    }
    

    在 JSTL 上

    <c:out value="${requestScope.teacher.prettyName}"/>
    

    ${requestScope.teacher.lastName}, ${fn:substring(requestScope.teacher.firstName, 0, 1)}
    

    【讨论】:

    • 您好 Jigar Joshi,感谢您的回复。我实际上在请求中有一个教师 bean。这就是为什么我要访问它,如问题所示。但就像我说的它返回字符串本身。
    • 是的,我的意思是,如果您修改 Bean 类以包含此方法并以这种方式调用它并在 java 代码中处理子字符串部分,那会更容易
    • 我真的希望字符串被视为 EL 以显示格式化的学生姓名。如果没有其他方法,我会尝试您的建议。非常感谢。
    • 为什么是 fn: ?完全不需要达到 OP 的要求。
    • @Shailesh 它在哪里说?
    【解决方案2】:

    无需使用fn:,所有与String相关的方法直接工作如下:

    用途:

    <c:out value="${requestScope.teacher.lastName}"/>
    <c:out value="${requestScope.teacher.firstName.substring(0,1)}"/>
    

    它应该工作。此外,如果您保留 requestScope,它将仅在该特定范围内寻找特定值来评估 EL。因此,请确保您的老师在请求范围内可用。

    【讨论】:

    • 您好,感谢 fn: 的建议。我更新了问题以使我的真正问题更清楚。
    • 但是学生名字和姓氏的值在哪里设置?贴出你的Teacher class相关的代码,我想知道Teacher Class是否有任何与student相关的字段?或者您将如何获得与学生相关的名字和姓氏?
    • 一个班级有老师,学生就属于一个班级。有一个 CLASS_STUDENT 表,其中包含学生到班级的映射。我了解到我想要实现的目标是不可能的。这就是为什么按照 Jigar Joshi 的建议,我用 Java 进行了格式化。
    • 既然您已经接受了其中一个答案,那么您的问题是否已经解决,或者根据您的评论,我是否需要努力理解并尝试提供任何可行的解决方案?
    • 我的问题已经解决了。我用Java进行了格式化。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 2021-08-02
    相关资源
    最近更新 更多