JSTL c:set 和 Struts s:set 是不受欢迎的数字格式

Posted

技术标签:

【中文标题】JSTL c:set 和 Struts s:set 是不受欢迎的数字格式【英文标题】:JSTL c:set and Struts s:set are undesirably formatting numbers 【发布时间】:2014-06-18 23:01:14 【问题描述】:
<c:set var="xmlDocumentId" value="$id" scope="request" />
<s:set var="xmlDocumentId" value="%id" scope="request" />

正在根据区域设置格式化 id,将 xmlDocumentId 设置为 "12,345" while:

<c:out value="$id" />
<s:property value="%id" />

正在输出“12345”。

任何想法如何打破这种行为?

【问题讨论】:

删除范围="request"。 删除范围使变量在使用它的地方不可用。 你想在哪里使用它? 在请求中。属性正在使用它来生成文档的链接。例如xmlDocumentUrl=xmlDocument.action?xmlDocumentId=xmlDocumentId 我可以通过创建另一个将 id 作为字符串而不是长字符串返回的访问器来解决此问题,但我'宁愿了解为什么 c:set 和 s:set 是格式化数字。 如何构造url-s?使用 S2 标签来做到这一点。那么就不需要放在请求中了。 【参考方案1】:

因为您使用getText&lt;s:text&gt; 标记获得价值,所以您的长值会根据区域设置进行格式化。为防止这种情况发生,请将您的 long 转换为字符串。

使用&lt;s:set&gt;标签可以直接在value属性中调用toString()方法。

<s:set var="xmlDocumentId" value="id.toString()" scope="request" />

对于具体的格式化算法,请查看java.text.MessageFormat 类及其subformat 方法。

【讨论】:

【参考方案2】:

一旦您知道how to format numbers in Java,在Struts2 中的&lt;s:property/&gt; 标签中,您就可以使用getText() 以所需的方式格式化您的号码,例如:

<s:property value="getText('0,number,#,##0',id)"/>

【讨论】:

Andrea:谢谢,但问题是当我不想设置标签时,它正在格式化我的数字。如何阻止 set 标签格式化数字?【参考方案3】:

试试这个

<s:text name="id" > <s:param name="value" value="id"/> </s:text>

【讨论】:

以上是关于JSTL c:set 和 Struts s:set 是不受欢迎的数字格式的主要内容,如果未能解决你的问题,请参考以下文章

C/C++——set的基本操作总结

通过属性和正文指定 JSTL <c:set> 值的区别

JSTL之c:set

JSTL--JSTL表达式:c:set,c:if,c:choose,--drp214

JSTL中&#60;c:set&#62;标签的用法

OGNL和EL表达式对比 Struts2标签和JSTL对比