Fassen Sie die Entwicklungsrichtlinie für TERASOLUNA Server Framework für Java (5.x) selbst zusammen: 4.8 Codeliste

Einführung

Hallo. Ich habe angefangen, TERASOLUNA zu studieren.

―― Als Lernmethode werde ich eine Weile Richtlinien lesen, aber da die Informationsmenge sehr hoch ist, werde ich fortfahren und sie auf meine eigene Weise zusammenfassen. Ich werde gehen.

4.8 Codeliste

infomation

Ausführung

5.3.1.RELEASE (2017-11-10)

Geschichte

Hauptgeschichte

1.OverView

Das Neuladen ist standardmäßig nur möglich, wenn die in der Datenbank definierte Codeliste verwendet wird.

Klassendiagrammstruktur (aus Richtlinien)

Aus Richtlinien

  1. How to use

2.1 Verwendung von SimpleMapCodeList

Lesen Sie beim Starten der Anwendung den in der XML-Datei definierten Codewert und verwenden Sie ihn unverändert.

Codelisteneinstellungen

Codeliste in JSP verwenden

Durch Verwendung des von der allgemeinen Bibliothek bereitgestellten Interceptors wird der Anforderungsbereich automatisch festgelegt und die Codeliste kann leicht von der JSP aus referenziert werden.

Codeliste in der Java-Klasse verwenden

Injizieren Sie die Codeliste mit "@ Inject" und "@ Named". Geben Sie für "@ Named" die Codelisten-ID an.

2.2 Verwendung von NumberRangeCodeList

Code, der den angegebenen Zahlenbereich beim Start der Anwendung auflistet. Es ist hauptsächlich für eine Reihe von Auswahlfeldern und Auswahlfeldern für Monate und Daten vorgesehen.

NumberRangeCodeList unterstützt nur arabische Zahlen, keine chinesischen oder römischen Zahlen. Wenn Sie chinesische und römische Zahlen anzeigen möchten, können Sie diese in JdbcCodeList und SimpleMapCodeList definieren.

Beispiel für die Einstellung der Codeliste (Implementierungsbeispiel, wenn der Wert von From kleiner als To ist)

--<property name = "from" value = "" />Bereichsstartwert (Standard ist 0) --<property name = "to" value = "" />Bereichsendwert (erforderlich) --<property name = "valueFormat" value = "" />Legen Sie das Format des Codewerts fest (das Format von" java.lang.String.format "wird verwendet) (Standard ist"% s "). --<property name = "labelFormat" value = "" />Legt das Format des Codenamens fest (das Format von java.lang.String.format wird verwendet) (Standard ist% s) --<property name = "interval" value = "" />Stellen Sie den zu erhöhenden Wert ein (Standard ist 1).

Codeliste in JSP verwenden

Entspricht der Verwendung von SimpleMapCodeList.

Codeliste in der Java-Klasse verwenden

Entspricht der Verwendung von SimpleMapCodeList.

2.3 Verwendung von JdbcCodeList

Eine Klasse, die beim Start der Anwendung Werte aus der Datenbank abruft und eine Codeliste erstellt. Da beim Starten der Anwendung ein Cache erstellt wird, tritt beim Anzeigen der Liste keine Verzögerung aufgrund des DB-Zugriffs auf. Sie können eine Obergrenze für die Anzahl der Erfassungen festlegen, um die Ladezeit beim Start zu verringern. Sie kann geändert werden, indem Sie eine Obergrenze für "fetchSize" von "org.springframework.jdbc.core.JdbcTemplate" festlegen.

Beispiel für die Einstellung der Codeliste

Codeliste in JSP verwenden

Entspricht der Verwendung von SimpleMapCodeList.

Codeliste in der Java-Klasse verwenden

Entspricht der Verwendung von SimpleMapCodeList.


Eine Klasse, die eine Codeliste aus den in der Enum-Klasse definierten Konstanten erstellt. > Wenn Sie mit einer Codeliste in einer Anwendung arbeiten, die die folgenden Kriterien erfüllt, sollten Sie EnumCodeList verwenden, um die Codelistenbezeichnungen in der Enum-Klasse zu verwalten. Durch Verwalten der Beschriftungen der Codeliste in der Enum-Klasse können die mit den Codewerten verknüpften Informationen und Operationen in der Enum-Klasse zusammengefasst werden. > - Codewerte müssen von der Enum-Klasse verwaltet werden (dh die Java-Logik muss unter Berücksichtigung der Codewerte verarbeitet werden)> - Keine Internationalisierung der Benutzeroberfläche (Mehrsprachigkeit) erforderlich> Mit EnumCodeList Die Schnittstelle org.terasoluna.gfw.common.codelist.EnumCodeList.CodeListItem wird als Schnittstelle zum Abrufen der Informationen (Codewerte und Beschriftungen) bereitgestellt, die zum Erstellen einer Codeliste aus der Enum-Klasse erforderlich sind. > Bei Verwendung von EnumCodeList muss die Schnittstelle EnumCodeList.CodeListItem in der erstellten Enum-Klasse implementiert werden.

Beispiel für die Einstellung der Codeliste

--Erstellen Sie eine Enum-Klasse, die "EnumCodeList.CodeListItem" implementiert, das von der allgemeinen Bibliothek bereitgestellt wird. In der CodeListItem-Schnittstelle wird Folgendes als Methode zum Abrufen der Informationen (Codewert und Bezeichnung) definiert, die zum Erstellen einer Codeliste erforderlich sind. - getCodeValue() - getCodeList()

Die Reihenfolge der Codeliste bei Verwendung von EnumCodeList ist die Definitionsreihenfolge der Konstanten.

Codeliste in JSP verwenden

Entspricht der Verwendung von SimpleMapCodeList.

Codeliste in der Java-Klasse verwenden

Entspricht der Verwendung von SimpleMapCodeList.

2.5 Verwendung von SimpleI18nCodeList

Eine Codeliste, die die Internationalisierung unterstützt. Sie können für jedes Gebietsschema eine Codeliste festlegen und die dem Gebietsschema entsprechende Codeliste zurückgeben.

Beispiel für die Einstellung der Codeliste

Es ist leicht zu verstehen, wenn Sie sich eine zweidimensionale Tabelle vorstellen, in der die Zeile "Gebietsschema", die Spalte der Codewert und der Zelleninhalt die Bezeichnung ist. Es gibt drei Möglichkeiten, dies festzulegen. Grundsätzlich wird jedoch die Methode zum "zeilenweisen Festlegen der Codeliste für jedes Gebietsschema" empfohlen.

xxx-codelist.xml


<bean id="CL_I18N_PRICE"
    class="org.terasoluna.gfw.common.codelist.i18n.SimpleI18nCodeList">
    <property name="rowsByCodeList"> <!-- (1) -->
        <util:map>
            <entry key="en" value-ref="CL_PRICE_EN" />
            <entry key="ja" value-ref="CL_PRICE_JA" />
        </util:map>
    </property>
</bean>

Für die Codeliste für jedes Gebietsschema können die oben genannten "SimpleMapCodeList" und "JdbcCodeList" erstellt werden. Derzeit unterstützt SimpleI18nCodeList reloadable nicht und muss durch eine eigene Implementierung unterstützt werden.

2.6. Zeigen Sie den Codenamen von einem bestimmten Codewert an

Wenn Sie auf die Codeliste von JSP aus verweisen, kann auf dieselbe Weise wie auf die Map-Schnittstelle verwiesen werden. Beispiel: Auftragsstatus: $ {f: h (CL_ORDERSTATUS [orderForm.orderStatus])} (Durch Angabe des im Codewert (in diesem Beispiel orderStatus) gespeicherten Werts als erfassten Map-Schnittstellenschlüssel kann der entsprechende Codename angezeigt werden.)

2.7. Überprüfen der Eingabe von Codewerten anhand der Codeliste

Bei der Überprüfung, ob der Eingabewert ein in der Codeliste definierter Codewert ist, stellt die allgemeine Bibliothek eine Anmerkung für BeanValidation bereit: "org.terasoluna.gfw.common.codelist.ExistInCodeList". (Zu diesem Zeitpunkt muss die Standardfehlermeldung gemäß den Anforderungen der Anwendung geändert werden.)

Beispiel für "@ ExistInCodeList" setzen

xxx-codelist.xml


<bean id="CL_GENDER" class="org.terasoluna.gfw.common.codelist.SimpleMapCodeList">
    <property name="map">
        <map>
            <entry key="M" value="Male" />
            <entry key="F" value="Female" />
        </map>
    </property>
</bean>

Person.java


public class Person {
    @ExistInCodeList(codeListId = "CL_GENDER")  // (1)
    private String gender;

    // getter and setter omitted
}

Die einzigen Typen, die von der @ ExistInCodeList-Eingabeprüfung unterstützt werden, sind Implementierungsklassen für die CharSequence-Schnittstelle (z. B. String) oder Character. Selbst wenn das Feld mit @ExistInCodeList semantisch ein ganzzahliger Typ ist, muss es daher als Zeichenfolge definiert werden. (Jahr / Monat / Tag usw.) Da @ExistInCodeList keine Werte in der Auflistung unterstützt, muss eine Implementierung erstellt werden, um die Annotation @ExistInCodeList für mehrere auswählbare Bildschirmelemente (Kontrollkästchen, Dropdown-Liste für Mehrfachauswahl usw.) zu unterstützen. Gibt es.

  1. How to extend

3.1. Beim erneuten Laden der Codeliste

Wenn Sie die Stammdaten der Codeliste aktualisieren, möchten Sie möglicherweise auch die Codeliste aktualisieren. Die allgemeine Bibliothek bietet die Schnittstelle org.terasoluna.gfw.common.codelist.ReloadableCodeList. Durch Implementieren und Aufrufen der Aktualisierungsmethode kann die Codeliste aktualisiert werden. Es gibt zwei Möglichkeiten, die Codeliste zu aktualisieren.

** In den Richtlinien wird empfohlen, den von Spring bereitgestellten Taskplaner zu verwenden, um die Codeliste regelmäßig neu zu laden. ** **. (Wenn Sie zu irgendeinem Zeitpunkt aktualisieren müssen, können Sie Controller verwenden.)

Mit Taskplaner aktualisieren

xxx-codelist.xml


<task:scheduler id="taskScheduler" pool-size="10"/>  <!-- (1) -->

<task:scheduled-tasks scheduler="taskScheduler">  <!-- (2) -->
    <task:scheduled ref="CL_AUTHORITIES" method="refresh" cron="${cron.codelist.refreshTime}"/>  <!-- (3) -->
</task:scheduled-tasks>

<bean id="CL_AUTHORITIES" parent="AbstractJdbcCodeList">
    <property name="querySql"
        value="SELECT authority_id, authority_name FROM authority ORDER BY authority_id" />
    <property name="valueColumn" value="authority_id" />
    <property name="labelColumn" value="authority_name" />
</bean>
  1. Geben Sie die Thread-Poolgröße im Poolgrößenattribut von <Task: Scheduler> an. (Standardmäßig 1)
  2. Legen Sie die ID von <task: scheduler> im Scheduler-Attribut von <task: Scheduled-Tasks> fest.
  3. Geben Sie die Aktualisierungsmethode im Methodenattribut von <Task: geplant> an. Beschreiben Sie im Attribut cron das Format, das von "org.springframework.scheduling.support.CronSequenceGenerator" unterstützt wird. Da erwartet wird, dass sich das Reload-Timing des cron-Attributs je nach Umgebung ändert, wird empfohlen, es aus der Eigenschaftendatei oder den Umgebungsvariablen abzurufen.

Rufen Sie die Aktualisierungsmethode in der Klasse Contoller (Service) auf

3.2 So passen Sie Ihre eigene Codeliste an

Wenn dies mit den vier Arten von Codelisten, die von der allgemeinen Bibliothek bereitgestellt werden, nicht erreicht werden kann, passen Sie sie selbst an. Es gibt zwei Arten von Codelisten, die erstellt werden können. --AbstractCodeList Reloadable Wird verwendet, wenn dies nicht erforderlich ist. Überschreiben Sie "asMap". --AbstractReloadableCodeList Wird verwendet, wenn Reloadable erforderlich ist. Überschreiben Sie retrieveMap.

Codelistenklasse

Nehmen wir als Beispiel eine Codeliste, die eine Liste für das nächste Jahr dieses Jahres erstellt.

DepYearCodeList.java


@Component("CL_YEAR") // (1)
public class DepYearCodeList extends AbstractCodeList { // (2)

    @Inject
    JodaTimeDateFactory dateFactory; // (3)

    @Override
    public Map<String, String> asMap() {  // (4)
        DateTime dateTime = dateFactory.newDateTime();
        DateTime nextYearDateTime = dateTime.plusYears(1);

        Map<String, String> depYearMap = new LinkedHashMap<String, String>();

        String thisYear = dateTime.toString("Y");
        String nextYear = nextYearDateTime.toString("Y");
        depYearMap.put(thisYear, thisYear);
        depYearMap.put(nextYear, nextYear);

        return Collections.unmodifiableMap(depYearMap);
    }
}
  1. Registrieren Sie die Codeliste als Komponente bei @ Component. Im Wert wird die Codeliste durch den in der Bean-Definition festgelegten Codelistenabschnitt als Komponente registriert.
  2. Erben Sie "AbstractCodeList".
  3. Injizieren Sie JodaTimeDateFactory. Sie können eine Datumsklasse für Systemdaten erstellen.
  4. Überschreiben Sie die Methode asMap (), um eine Liste dieses und des nächsten Jahres zu erstellen.

Wenn Sie die nachladbare CodeList selbst anpassen, implementieren Sie sie so, dass sie threadsicher ist.

  1. Appendix

4.1. So legen Sie die Codeliste von SimpleI18nCodeList fest

Für andere als die unter Punkt 2.5 beschriebenen Methoden.

Legen Sie die Karte für jedes Gebietsschema zeilenweise fest

Legen Sie "Map of Map" für die Eigenschaft rows fest. Legen Sie das Gebietsschema zuerst auf der äußeren Karte fest und definieren Sie den Wert für jeden Schlüssel auf der inneren Karte.

Legen Sie Map für jeden Codewert für jede Spalte fest

Bestimmen Sie den Schlüssel zuerst auf der äußeren Karte und legen Sie das Gebietsschema und den entsprechenden Wert auf der inneren Karte fest.

Referenzen: TERASOLUNA Server Framework für Java (5.x) Entwicklungsrichtlinie

Recommended Posts

Fassen Sie die Entwicklungsrichtlinie für TERASOLUNA Server Framework für Java (5.x) selbst zusammen: 4.8 Codeliste
[Entwicklung] Java Framework Vergleich
Einstellungen für die Eclipse-Installation und die Verstärkung der Codevervollständigung (Mac für Java-Entwicklung)
Einführung von Spring Boot2, einem Java-Framework für die Webentwicklung (für Anfänger)