java - 如何在 forEach 循环中使用 spring:message
问题描述
我一直在开发一个系统,该系统使用<spring:message />
标签库从数据库中为网站提供双语支持。
我可以读/写应用程序 en/fr 属性文件。当我对新键进行硬编码时,<spring:message />
它将正确显示。Ex)<spring:message code="f12345' />
将显示“测试数据”。
我遇到的问题是使用动态密钥。无论我如何尝试附加密钥,它都会失败。
以下是我尝试过的按最终结果分组的方法。
500 错误 org.apache.jasper.JasperException: (line: [104], column: [29]) [quote/equal] 符号预期
<spring:message var><c:out value="${CLUObject.SpringKey_name()}" /></spring:message>
<spring:message var='<c:out value=\"${CLUObject.SpringKey_name()}\" />" text="wrong" />
<spring:message code="<c:out value="${CLUObject.SpringKey_name()}" />" text="${CLUObject.SpringKey_name()}" />
<spring:message code=<c:out value="${CLUObject.SpringKey_name()}" /> text="${CLUObject.SpringKey_name()}" />
<spring:message code= <c:out value="${CLUObject.SpringKey_name()}" /> />
接下来我们遇到了非服务器崩溃,这只会导致表格不显示
<spring:message var='<c:out value="application.message" />' arguments="${CLUObject.SpringKey_name()}" />
<spring:message var='<c:out value="${CLUObject.SpringKey_name()}" />' text="wrong" />
<spring:message code="<c:out value=\"${CLUObject.SpringKey_name()}\" />" />
<spring:message code="${CLUObject.SpringKey_name()}" />
<spring:message code="messageCode" arguments="$value1}" />
<c:set var="temp" > <c:out value="${CLUObject.SpringKey_name()}" /> </c:set><td><spring:message code="messageCode" arguments="${temp}" htmlEscape="false" /></td>
我设法得到的最好的方法是简单地显示键的文本而不是值。已经可以使用<spring:message text="${CLUObject.SpringKey_name()}" />'
在 applicationResources 文件中
messageCode=Test message for {0}.
然后在jsp页面里面
<c:set var="temp" > <c:out value="${CLUObject.SpringKey_name()}" /> </c:set>
显示“CLUVALUE.C1111 的测试消息”。
我在网上找到了一个似乎在做同样事情的网站。
<form:select path="${path}">
<c:forEach var="i" items="${items}">
<form:option value="${i[itemValue]}">
<c:choose>
<c:when test="${localize}">
<spring:message code="${i[itemLabel]}" text="${i[itemLabel]}"/>
</c:when>
<c:otherwise>
<c:out value="${i[itemLabel]}"/>
</c:otherwise>
</c:choose>
</form:option>
我发现了第二个示例,其中他们有一个动态键,并且在 forEach 循环中使用了 spring 消息。搜索spring:message
及其 14/17。
<c:forEach items="${errors.allErrors}" var="error">
<spring:message code="${error.code}" text="${error.code}"/><br/>
</c:forEach>
我找到了第三个例子。
在我找到的三个示例中,spring:message
它们都使用相同的代码和文本属性。
我看不到输出,我不能确定他们的文本参数没有被显示。
这是控制器块
List<CLU_STRUT> myCLUs = cluService.BuildCLUs();
model.addAttribute("CommonLookUp", myCLUs);
这是JSP
<c:forEach var="CLUObject" items="${CommonLookUp}" varStatus="vs">
<tr>
<c:set var="temp" > <c:out value="${CLUObject.SpringKey_name()}" /> </c:set>
<td><spring:message code="messageCode" arguments="${temp}" htmlEscape="false" /></td>
<td><c:if test="${CLUObject.getCountNew() gt 0}"> <a href='drillview?drillvalue=${CLUObject.SpringKey_name()}&mode=drill&drilltype=I'><c:out value="${CLUObject.getCountNew()}" /></a></c:if><c:if test="${CLUObject.getCountNew() eq 0}">0</c:if></td>
<td><c:if test="${CLUObject.getCountMod() gt 0}"> <a href='drillview?drillvalue=${CLUObject.SpringKey_name()}&mode=drill&drilltype=U'><c:out value="${CLUObject.getCountMod()}" /></a></c:if><c:if test="${CLUObject.getCountMod() eq 0}">0</c:if></td>
<td><c:if test="${CLUObject.getCountDelete() gt 0}"> <a href='drillview?drillvalue=${CLUObject.SpringKey_name()}&mode=drill&drilltype=D'><c:out value="${CLUObject.getCountDelete()}" /></a></c:if><c:if test="${CLUObject.getCountDelete() eq 0}">0</c:if></td>
<td><c:out value="${CLUObject.getCountTotal()}" /></td>
</tr>
</c:forEach>
TLDR;如何使用 spring:message,其中密钥在 jsp 页面中是动态的。
解决方案
我终于弄清楚了问题所在。
简短的回答:控制反转导致事情现在按照我的预期发生。我试图访问一个函数或成员,它一直在尝试使用它的获取版本。由于我没有专门的 getmember() 来访问该变量,因此它正在做奇怪和错误的事情。
通过介绍public String getspring_name() {return spring_name;}
一下子的<spring:message code="${CLUObject.spring_name}" />
作品。
长答案:在我的代码的另一部分中,我发现了我认为是在 jsp 页面中访问的私有字符串成员。在对其他私有变量类型和函数进行了大量测试之后,我最初认为我正在访问私有成员的想法被推翻了。然而,这个特定的正在被访问。经过更多测试后,我发现当我在一个非常具体的命名约定中使用 get 函数时,这种行为是可重现的。所以在这种情况下,我有一个私有字符串 CLU_Name,并且很幸运地创建了 get 函数作为 getCLU_Name()。为 Count_Delete 命名其他 get 函数(如 getCountDelete() )不允许我重现THEM的行为,因为它们不符合命名模式。
推荐阅读
- java - 分割线问题
- python - 单击时更改 QPushButton 文本
- maven - 通过 Jenkins CI 使用外部 jar 构建 Maven 项目,未集成在 pom.xml 中
- python - numpy 检查所有元素是否为 False
- autohotkey - 是否可以触发带有双空格的 Hotstring?如果不是通过 Hotstring 可以通过其他方式完成吗?
- flutter - How do I increment a counter and disable a button in Flutter?
- python - Keras 实时训练日志重复 - 在每个时期一次又一次地打印进度条?
- html - jupyter 笔记本上每个单元格的多个 Markdown 翻译
- php - 在mysql多查询中使用最后插入的id
- node.js - 节点 12 的 axios SSL 错误:SSL 例程:ssl_choose_client_version:不支持的协议