2011-03-22 116 views
2

我正在使用Struts(v1)的J2EE应用程序,我想格式化一个正在JSP中显示的值。要显示的值是7或8位整数,我想插入破折号到它,就像这样:如何格式化JSP中的值?

1234567 -> 1-234-567 
12345678 -> 12-345-678 

什么是去了解这一点的最好方法是什么?我的第一个想法是在我的表单bean中写一个特殊的getter,它将返回特殊格式的String,而不是Integer。当然,这看起来很臭 - 我不想为我的JSP添加方法来格式化我的bean。

我考虑的另一个选择是使用bean:write的format属性。不幸的是,当你尝试格式化日期时,我可以找到很多关于如何使用格式的文档,但我似乎无法找到使用任意值的正确语法。

有什么想法?

回答

3

我做了一些研究fmt:formatNumber ...我认为使用-会导致一些奇怪的问题,因为,是唯一安全的分组分隔符。基于文档,您似乎可以使用单引号评论特殊字符,但我认为它不适用于您的情况。

所以,这里是我的解决办法: -

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> 
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 

<c:set var="foo" value="12345678"/> 
<fmt:formatNumber value="${foo}" pattern="00,00,000" var="result"/> 
${fn:replace(result, ",", "-")} 

这对我的作品。基本上,我使用逗号而不是破折号,然后使用替换函数将其转换回破折号...不是一个优雅的解决方案。

+0

我想这样做与bean非常类似的事情:写标签,像这样:我得到的结果与我在尝试执行上面的代码时得到的结果相同。我得到这个数字,之后有两个破折号,如下所示:1234567 - 。我错过了什么吗? – McGlone 2011-03-22 18:32:53

+0

我更新了我的帖子。 – limc 2011-03-22 19:16:59

+0

感谢您的回应。不幸的是,我在多个位置显示这个格式化的数字,我不想每次需要显示它时都要将这三行放在我的JSP中。因此,我选择将方法放入我的表单bean中,该方法将格式化该值并将其作为字符串发回。不完美,但它的工作原理。 – McGlone 2011-04-12 13:52:53

0
+1

这个答案在JSP上下文中并不是很有用。普遍的共识是将原始Java代码放入JSP文件是一种不好的做法。 – BalusC 2011-03-22 18:47:43

+0

Java代码不需要在JSP中。它可以用来在JSP中定义一个TAG,它按照这种格式对数字进行格式化。或者同时接受号码和数字格式的标签 – 2011-03-22 18:52:39

1

豆:写,你只能使用日期格式和DecimalFormat的,不能做你希望在这里做什么(DecimalFormat的不会完全免费的格式化并保留 - 作为特殊字符)。

Struts的文档建议只是格式化它在你的ActionForm:http://struts.apache.org/1.x/struts-taglib/faq.html#tags

如果你真的想这样做在你的JSP,你可能必须写你自己的标签库来处理它。甚至不是JSTL可真的连您处理该问题:http://download.oracle.com/docs/cd/E17802_01/products/products/jsp/jstl/1.1/docs/tlddocs/fmt/tld-summary.html

0

使用的东西沿着这些线路,它应该帮助你了!!:

<bean:write name="formBean" property="dashedNum" format="###'-'###'-'###"/> 
+0

这不起作用。在提交答案前请先测试代码。 – 2011-03-23 10:51:16