【问题标题】:Java web application propertiesJava Web 应用程序属性
【发布时间】:2010-10-04 00:32:00
【问题描述】:

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 实现了类似的功能。

【问题讨论】:

    标签: java spring jakarta-ee properties jstl


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      如果我理解正确,您希望能够将其中一些属性的格式和描述放在外部文件中。您可能想看看 Spring 的 MessageSource(链接到 javadoc here),它有点绕回并类似于 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 中指定格式,但我知道这是可能的。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

            【解决方案5】:

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

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

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

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

            提姆

            【讨论】:

              【解决方案6】:

              看看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 更像是一个富客户端应用程序,而不是一个标准的基于表单的应用程序。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2016-09-13
                • 1970-01-01
                • 1970-01-01
                • 2011-04-11
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多