Java web应用程序属性

Java web应用程序属性,java,spring,jakarta-ee,properties,jstl,Java,Spring,Jakarta Ee,Properties,Jstl,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.nam

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>
Name:${person.Name}
出生日期:${person.dateOfBirth}
身高:${person.Height}
体重:${person.Weight}
此外,可能有几个不同的页面显示一个人。请注意,出生日期是一个
java.util.date
,因此JSP或控制器将使用
java.text.simpleDataFormat
对其进行格式化。身高和体重是数字,它们可能有自己的
java.util.Format
用于格式化

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


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

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


另外,spring:message标签提供了对i18n静态文本的支持,但我认为它不会很容易地与bean结合起来。

如果我理解正确,您希望能够将这些属性的格式和描述放在外部文件中。您可能想看看Spring的(link to),它有点绕圈子,并且对JDK中的类很有帮助

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

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

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

您是在寻找对表达式求值的支持,还是在寻找输出bean属性的方法

Spring具有这两种功能,对于前者,请检查Spring文档: 对于后者,请检查文档:


Java语言本身并没有指定访问属性的语言,也不支持您想要的级别的属性概念,尽管Swing之类的东西支持属性,Java也支持相关的东西,但请查看包。

要使用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>

:${person.name}




您需要格式化person属性的内容,并且希望在多个页面中使用它。在我看来,您应该使用cutom标记来执行此操作:

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

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

结帐: 及

蒂姆看一看

Wicket WebBeans(WWB)是一个ApacheWicket()组件工具包,用于显示和编辑符合JavaBeans规范的POJO。网页是根据bean属性和某些约定自动生成的。如有必要,可以在例外情况下自定义这些页面的布局、可编辑性和操作。换句话说,工具箱通常会执行您期望的操作,但如果它不执行,您可以覆盖它的行为

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

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

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