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.
infomation
1.OverView
Das Neuladen ist standardmäßig nur möglich, wenn die in der Datenbank definierte Codeliste verwendet wird.
SimpleMapCodeList
Verwenden Sie den direkt in der XML-Datei beschriebenen Inhalt.
--NumberRangeCodeList
Wird beim Erstellen einer Liste von Zahlenbereichen verwendet.
--JdbcCodeList
Ruft den Zielcode mit SQL aus der Datenbank ab und verwendet ihn.
--EnumCodeList`` Wird beim Erstellen einer Codeliste aus den in der Enum
-Klasse definierten Konstanten verwendet.
--SinpleI18nCodeList
Verwenden Sie die Codeliste gemäß java.util.Locale.Aus Richtlinien
Lesen Sie beim Starten der Anwendung den in der XML-Datei definierten Codewert und verwenden Sie ihn unverändert.
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.
Wird in der Bean-Definitionsdatei (spring-mvc.xml) festgelegt.
Setzen Sie den zutreffenden Pfad mit <mvc: Mapping Path =" / ** ">
(in diesem Fall als Ganzes festlegen).
--Bean Definition der CodeListInterceptor-Klasse. Durch Setzen von <propertyy name =" CodeListIdPattern "value =" CL_. + "/>
Das BeanID-Muster der Codeliste, das automatisch im Anforderungsbereich festgelegt wird, sind die Daten, deren ID im Format "CL_XXX" definiert ist. Kann nur gezielt werden. Die hier geltende Bean-ID ist in JSP verfügbar.
Wenn Sie "codeListPattern" weglassen, sind alle Codelisten in JSP verfügbar.
Implementieren Sie es in JSP (im Fall eines Auswahlfelds). Ein Dummy-Wert kann zu Beginn festgelegt werden, indem ein leeres Zeichen für --value festgelegt wird.
Durch die Einstellung <form: options items =" $ {CL_XXX} "/>
werden die Optionen ausgegeben, die für die Bean-ID gelten.
Injizieren Sie die Codeliste mit "@ Inject" und "@ Named". Geben Sie für "@ Named" die Codelisten-ID an.
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.
--<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).
Entspricht der Verwendung von SimpleMapCodeList.
Entspricht der Verwendung von SimpleMapCodeList.
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.
org.springframework.jdbc.core.JdbcTemplate
.
--Stellen Sie fetchSize
ein. Beachten Sie, dass der Standardwert für die Erfassung aller Datensätze die Verarbeitungsleistung beeinträchtigt.
--Stellen Sie in jeder JdbcCodeList
Folgendes ein.Entspricht der Verwendung von SimpleMapCodeList.
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.
--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.
Entspricht der Verwendung von SimpleMapCodeList.
Entspricht der Verwendung von SimpleMapCodeList.
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.
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>
java.lang.Locale
in der Eigenschaft rowsByCodeList`. Geben Sie in Map das Gebietsschema in key und das Referenzziel der Codelistenklasse an, die dem Gebietsschema in value-ref entsprechen. Der Kartenwert bezieht sich auf die Codelistenklasse, die jedem Gebietsschema entspricht.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.
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.)
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.)
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.
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.)
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>
<task: scheduler>
im Scheduler-Attribut von <task: Scheduled-Tasks>
fest.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
.
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);
}
}
@ Component
. Im Wert wird die Codeliste durch den in der Bean-Definition festgelegten Codelistenabschnitt als Komponente registriert.JodaTimeDateFactory
. Sie können eine Datumsklasse für Systemdaten erstellen.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.
Für andere als die unter Punkt 2.5 beschriebenen Methoden.
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.
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.
Recommended Posts