5

Java 和/或 Spring 是否有属性的概念?我有一堆域模型,每个模型都有几个属性。例子:

public class Person {
    private String name;
    private Date dateOfBirth;
    private float height;
    private float weight;
    // getters and setters not shown
}

当显示一个人时,属性名称在 JSP 中是硬编码的。

Name: ${person.name}<br>
Date of birth: ${person.dateOfBirth}<br>
Height: ${person.height}<br>
Weight: ${person.weight}<br>

此外,可能有几个不同的页面显示一个人。请注意,出生日期是 a java.util.Date,因此 JSP 或控制器将使用java.text.SimpleDateFormat它来格式化它。身高和体重是数字,它们可能有自己java.util.Format的格式。

我正在寻找一种属性查找机制。每个属性(姓名、出生日期、身高等)都有显示名称、格式和描述(用于帮助或工具提示)。属性的属性将在某个配置文件中定义。显示属性时,将通过属性机制查找显示名称和格式。这也将解决本地化问题。

我的问题是是否已经为 Java 实现了类似的东西。

4

6 回答 6

2

要使用 JSP 和 JSTL 做到这一点,您可以使用“fmt”标签库,它支持数字、日期等的本地化和格式化。

在您发布的示例中,代码将如下所示:

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%-- ..assuming bundle and locale are already set... --%>
<fmt:message key="NAME" bundle="${myBundle}"/>: ${person.name}<br>
<fmt:message key="DOB" bundle="${myBundle}"/>: <fmt:formatDate type="date" value="${person.dateOfBirth}"/><br>
<fmt:message key="HEIGHT" bundle="${myBundle}"/>: <fmt:formatNumber pattern="##.##" value="${person.height}"/><br>
<fmt:message key="WEIGHT" bundle="${myBundle}"/>: <fmt:formatNumber pattern="##.##" value="${person.weight}"/><br>
于 2009-01-28T15:35:16.487 回答
1

如果我理解正确,您希望能够将其中一些属性的格式和描述放在外部文件中。您可能想看一下 Spring 的(此处为 javadocMessageSource的链接),它有点环绕,类似于JDK 中的类。ResourceBundle

使用MessageSource's 将允许您将格式和任何文本放在外部文件中(并且对于不同的语言有不同的属性文件),但我相信您仍然需要在 JSP 中包含哪些属性作为参数传递,例如:

<spring:message code="user.dob" arguments="${user.dateOfBirth}"/>

您的messages.properties文件包含:

user.dob = Your date of birth is {0}

我不完全确定如何在 中指定格式messages.properties,但我知道这是可能的。

于 2009-01-28T15:01:33.233 回答
0

您想要提供的一些信息非常适合 BeanInfo 对象,最初是为了支持 JavaBeans 的东西——我不知道它是否仍在使用,以及它是否可以按照您想要的方式使用。

另外 spring:message 标签提供了对静态文本 i18n 的支持,但我认为它不会轻易与您的 bean 绑定。

于 2009-01-28T14:44:00.927 回答
0

您是在寻找对表达式评估的支持,还是在寻找一种输出 bean 属性的方法?

Spring 两者都有,对于前者检查 spring 文档:Spring Expression Evaluator 对于后者检查文档:Spring MVC

Java 语言本身并没有指定访问属性的语言,也不支持您想要的级别的属性概念,尽管 Swing 等一些东西支持属性,而 java 也支持相关的东西,请检查java.beans包。

于 2009-01-28T15:03:09.750 回答
0

您想要一些格式化人员属性的东西,并且您想在多个页面中使用它。在我看来,您应该使用自定义标签来执行此操作:

<you:person = "${person}"/>

当您使用 facelets 时,该标签可能只是另一个 facelet,您可以在其中编写 outputTexts 以打印信息。因此,您可以添加对不同位置的支持。

结帐:https ://facelets.dev.java.net/ 和http://andrewfacelets.blogspot.com/2006/06/creating-composite-controls-with-jsf.html

蒂姆

于 2009-01-30T08:30:56.120 回答
0

看看Wicket Web Beans

Wicket Web Beans (WWB) 是一个 Apache Wicket ( http://wicket.apache.org ) 组件工具包,用于显示和编辑符合 JavaBeans 规范的 POJO。网页是根据 bean 属性和某些约定自动生成的。如有必要,可以例外地自定义这些页面的布局、可编辑性和操作。换句话说,该工具包通常会执行您所期望的操作,但当它没有执行时,您可以覆盖它的行为。

在最高级别,net.sourceforge.wicketwebbeans.containers.BeanForm 组件提供了丰富的 AJAX 表单功能。该表单嵌入在您设计的页面中。这允许您创建自定义页面设计。此外,这允许将多个 BeanForm 合并到一个页面上。根据您的选择,可以独立于 BeanForm 使用其他较低级别的组件(例如 BeanGridPanel)。WWB 不会试图强迫您采用某种方式做事,但是如果您不想做很多额外的工作,BeanForm 可以非常方便地实现基于 bean 的表单。您专注于模型(bean),WWB 处理用户界面。

表单中的字段在更改时会动态发送回服务器端 bean,从而消除了典型的提交周期。这使得 WWB 更像是一个富客户端应用程序,而不是一个标准的基于表单的应用程序。

于 2009-01-30T17:51:06.410 回答