繁体   English   中英

Java Web应用程序属性

[英]Java web application properties

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>

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

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

我的问题是,是否已经为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>

如果我理解正确,您希望能够将其中一些属性的格式和描述放在外部文件中。 您可能想看一下Spring的MessageSource这里javadoc的链接),它有些包装并且与JDK中的ResourceBundle类类似。

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

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

您的messages.properties文件包含的位置:

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

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

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

另外spring:message标签提供了对静态文本i18n的支持,但我认为它不会轻易地与你的bean配合使用。

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

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

Java语言本身没有指定用于访问属性的语言,也没有在您想要的级别支持属性概念,尽管像Swing这样的东西支持属性,而java也支持相关的东西,请查看java.beans包。

您需要一些格式化人物属性的内容,并且您希望在多个页面中使用它。 在我看来,你应该使用cutom标签来做到这一点:

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

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

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

蒂姆

看看Wicket Web Beans

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM