5 Stimmen

Eigenschaften von Java-Webanwendungen

Gibt es in Java und/oder Spring das Konzept der Eigenschaften? Ich habe eine Reihe von Domänenmodellen, von denen jedes mehrere Eigenschaften hat. Beispiel:

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

Bei der Anzeige einer Person werden die Eigenschaftsnamen in der JSP hart kodiert.

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

Außerdem kann es mehrere Seiten geben, auf denen eine Person angezeigt wird. Beachten Sie, dass das Geburtsdatum eine java.util.Date so wird die JSP oder der Controller java.text.SimpleDateFormat um es zu formatieren. Größe und Gewicht sind Zahlen, und sie können ihre eigenen java.util.Format für die Formatierung verwendet.

Was ich bin auf der Suche nach einer Eigenschaft Lookup-Mechanismus. Jede Eigenschaft (Name, Geburtsdatum, Größe usw.) würde den Anzeigenamen, das Format und die Beschreibung (für Hilfe oder Tooltips) haben. Die Attribute der Eigenschaften würden irgendwo in einer Konfigurationsdatei definiert werden. Bei der Anzeige einer Eigenschaft würden der Anzeigename und das Format über den Eigenschaftsmechanismus nachgeschlagen werden. Dies würde auch die Lokalisierung erleichtern.

Meine Frage ist, ob es bereits so etwas für Java implementiert ist.

2voto

Todd Punkte 1906

Um dies mit JSP und JSTL zu erreichen, können Sie die Tag-Bibliothek "fmt" verwenden, die die Lokalisierung und Formatierung von Zahlen, Daten usw. unterstützt.

In dem von Ihnen genannten Beispiel würde der Code etwa so aussehen:

<%@ 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>

1voto

matt b Punkte 135206

Wenn ich Sie richtig verstehe, möchten Sie das Format und die Beschreibung einiger dieser Eigenschaften in einer externen Datei speichern können. Vielleicht möchten Sie einen Blick auf Spring's MessageSource (Link zu javadoc hier ), die sich in gewisser Weise um die ResourceBundle Klasse im JDK.

使用方法 MessageSource ermöglicht es Ihnen, das Format und den Text in einer externen Datei zu platzieren (und verschiedene Eigenschaftsdateien für verschiedene Sprachen zu haben), aber ich glaube, dass Sie in Ihrer JSP immer noch angeben müssen, welche Eigenschaften als Argumente übergeben werden sollen, zum Beispiel:

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

wo Ihr messages.properties Datei enthält:

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

Ich bin mir nicht ganz sicher, wie man das Format in messages.properties aber ich weiß, dass es möglich ist.

0voto

Simon Groenewolt Punkte 10497

Einige der Informationen, die Sie bereitstellen möchten, passen gut in ein BeanInfo-Objekt, das ursprünglich zur Unterstützung von JavaBeans gedacht war - ich habe keine Ahnung, ob es noch verwendet wird und ob es in der von Ihnen gewünschten Weise nutzbar wäre.

Zusätzlich bietet das spring:message-Tag Unterstützung für i18n von statischem Text, aber ich glaube nicht, dass es sich leicht mit Ihren Beans verbinden lässt.

0voto

Miguel Ping Punkte 17786

Suchen Sie Unterstützung für die Auswertung von Ausdrücken oder eine Möglichkeit, die Eigenschaften von Beans auszugeben?

Spring hat beides, für Ersteres siehe die Spring-Dokumente: Spring Ausdrucksauswerter Für Letzteres lesen Sie bitte die Dokumentation: Spring MVC .

Die Java-Sprache an sich spezifiziert weder eine Sprache für den Zugriff auf Eigenschaften noch unterstützt sie das Eigenschaftskonzept auf der von Ihnen gewünschten Ebene, obwohl einige Dinge wie Swing Eigenschaften unterstützen und Java auch einige Unterstützung für verwandte Dinge bietet, überprüfen Sie die java.beans Paket.

0voto

Tim Büthe Punkte 60908

Sie möchten etwas, das die Eigenschaften der Person formatiert, und Sie möchten dies auf mehreren Seiten verwenden. Meiner Meinung nach sollten Sie dafür einen Cutom-Tag verwenden:

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

Wenn Sie Facelets verwenden, könnte dieses Tag einfach ein weiteres Facelet sein, in dem Sie outputTexts zusammenstellen, um die Informationen zu drucken. Dadurch könnten Sie Unterstützung für verschiedene Standorte hinzufügen.

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

Tim

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X