gpt4 book ai didi

string - 如何在 JSTL/EL 中连接和清理字符串?

转载 作者:行者123 更新时间:2023-12-04 13:07:23 26 4
gpt4 key购买 nike

我有一组复杂的嵌套函数,它们基本上可以清理数据。

让我们假设我想发出一个经过清理的名字-姓氏组合,但名称显示为两个单独的变量。

我意识到我可以简单地单独发出每个变量,将每个变量包装在整个清理函数集中,但这既不优雅又危险:大量难以阅读的重复代码需要在整个生命周期内保持同步应用程序。

在真正的语言中,我会这样写:

${fn:trim(fn:replace(fn:replace(fn:replace(fn:replace(firstname + lastname, ..., ...), ..., ...), ..., ...), ..., ...))}

(这里,加号代表真正的蓝色连接运算符;javascript 的 '+'、PHP 的 '.' 等)

使用单独的语句来预先连接变量似乎也有点荒谬。

底线:这个问题已经在互联网上被问了一千次,但所有的答案都通过提出替代实现有效地回避了这个问题。我想知道这个功能是否存在,文档比琐碎更糟糕。

请结束我的痛苦,给我一个直接的答案。

最佳答案

你到底想 sanitizer 什么? HTML/XML 特殊字符,如 < , >等等以防止XSS漏洞?如果是这样,为什么不直接使用 <c:out> ?

<c:out value="${firstname} ${lastname}" />

如果真的有更多内容,最干净的方法是将该工作重构为 public static实用程序方法,将其注册为 EL 函数并调用它。

例如。
public final class Functions {

private Functions() {
// Hide c'tor in utility classes.
}

public static String sanitizeNames(String firstname, String lastname) {
// TODO: Implement.

return sanitizedFirstname + sanitizedLastname;
}

}

/WEB-INF/functions.tld 中注册如下文件

<?xml version="1.0" encoding="UTF-8" ?>
<taglib
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">

<display-name>Custom Functions</display-name>
<tlib-version>1.0</tlib-version>
<uri>http://example.com/functions</uri>

<function>
<name>sanitizeNames</name>
<function-class>com.example.Functions</function-class>
<function-signature>java.lang.String sanitizeNames(java.lang.String, java.lang.String)</function-signature>
</function>
</taglib>

并按如下方式使用
<%@taglib uri="http://example.com/functions" prefix="f" %>
...
${f:sanitizeNames(firstname, lastname)}

关于string - 如何在 JSTL/EL 中连接和清理字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9198156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com