Résumez par vous-même le guide de développement TERASOLUNA Server Framework for Java (5.x): 4.8 Liste de codes

introduction

Bonjour. J'ai commencé à étudier TERASOLUNA.

――Comme méthode d'étude, je lirai les Directives pendant un certain temps, mais comme la quantité d'informations est lourde, je vais procéder en les résumant à ma manière. J'irai.

4.8 Liste de codes

infomation

version

5.3.1.RELEASE (2017-11-10)

Histoire

Histoire principale

1.OverView

--Une liste de codes est un ensemble de "valeurs de code (valeur) et de leurs noms d'affichage (étiquette)". Il est utilisé comme une table de correspondance avec les étiquettes lors de l'affichage des valeurs de code à l'écran, telles que les cases de sélection à l'écran.

Le rechargement n'est possible par défaut que lors de l'utilisation de la liste de codes définie dans le DB.

Structure du diagramme de classes (à partir de Guidelines)

Tiré de Guidelines

  1. How to use

2.1. Comment utiliser SimpleMapCodeList

Lisez la valeur de code définie dans le fichier xml lors du démarrage de l'application et utilisez-la telle quelle.

Paramètres de la liste de codes

--Il est recommandé de créer le fichier de définition du bean (xxx-codelist.xml) pour la liste de codes.

Utilisation de la liste de codes dans JSP

En utilisant l'intercepteur fourni par la bibliothèque commune, la portée de la demande est automatiquement définie et la liste de codes peut être facilement référencée à partir de la JSP.

--Défini dans le fichier de définition du bean (spring-mvc.xml). --Définissez le chemin applicable avec <mvc: mapping path =" / ** "> (dans ce cas, définissez-le dans son ensemble).

Utilisation de la liste de codes dans la classe Java

Injectez la liste de codes en utilisant @ Inject et @ Named. Pour @ Named, spécifiez l'ID de la liste de codes.

2.2. Comment utiliser NumberRangeCodeList

Code qui répertorie la plage de nombres spécifiée au démarrage de l'application. Il est principalement destiné à être utilisé pour un certain nombre de cases de sélection et de cases de sélection pour les mois et les dates.

NumberRangeCodeList ne prend en charge que les nombres arabes, pas les nombres chinois ou romains. Si vous souhaitez afficher des nombres chinois et romains, vous pouvez les définir dans JdbcCodeList et SimpleMapCodeList.

Exemple de paramètre de liste de codes (exemple d'implémentation lorsque la valeur de From est rendue plus petite que To)

--<property name = "from" value = "" />Valeur de départ de la plage (la valeur par défaut est 0) --<property name = "to" value = "" />Valeur de fin de plage (obligatoire) --<property name = "valueFormat" value = "" />Définit le format de la valeur de code (le format de java.lang.String.format est utilisé) (la valeur par défaut est% s) --<property name = "labelFormat" value = "" />Définit le format du nom de code (le format de java.lang.String.format est utilisé) (la valeur par défaut est% s) --<property name = "interval" value = "" />Définir une valeur croissante (la valeur par défaut est 1)

Utilisation de la liste de codes dans JSP

Identique à l'utilisation de SimpleMapCodeList.

Utilisation de la liste de codes dans la classe Java

Identique à l'utilisation de SimpleMapCodeList.

2.3. Comment utiliser JdbcCodeList

Une classe qui récupère les valeurs de la base de données lorsque l'application démarre et crée une liste de codes. Puisqu'un cache est créé au démarrage de l'application, il n'y a pas de retard dû à l'accès à la base de données lors de l'affichage de la liste. Vous pouvez définir une limite supérieure sur le nombre d'acquisitions afin de réduire le temps de chargement au démarrage. Il peut être modifié en définissant une limite supérieure sur fetchSize de ʻorg.springframework.jdbc.core.JdbcTemplate`.

Exemple de configuration de liste de codes

--Définissez dans le fichier de définition du bean (xxx-codelist.xml). --ʻOrg.springframework.jdbc.core.JdbcTemplateDéfinit la classe comme un bean. --DéfinissezfetchSize. Notez que si la valeur par défaut est d'acquérir tous les enregistrements, cela affectera les performances de traitement. --Définissez les éléments suivants dans chaque JdbcCodeList`.

Utilisation de la liste de codes dans JSP

Identique à l'utilisation de SimpleMapCodeList.

Utilisation de la liste de codes dans la classe Java

Identique à l'utilisation de SimpleMapCodeList.

2.4. Comment utiliser EnumCodeList

Une classe qui crée une liste de codes à partir des constantes définies dans la classe Enum.

Si vous travaillez avec une liste de codes dans une application qui répond aux critères suivants, envisagez d'utiliser EnumCodeList pour gérer les étiquettes de liste de codes dans la classe Enum. En gérant les étiquettes de la liste de codes dans la classe Enum, les informations et les opérations associées aux valeurs de code peuvent être agrégées dans la classe Enum.

  • Les valeurs de code doivent être gérées par la classe Enum (c'est-à-dire que la logique Java doit être consciente des valeurs de code) --Pas besoin d'internationalisation de l'interface utilisateur (multilinguisme)

EnumCodeList fournit l'interface org.terasoluna.gfw.common.codelist.EnumCodeList.CodeListItem comme interface pour obtenir les informations (valeurs de code et étiquettes) nécessaires pour créer une liste de codes à partir de la classe Enum. .. Lorsque vous utilisez EnumCodeList, il est nécessaire d'implémenter l'interface EnumCodeList.CodeListItem dans la classe Enum créée.

Exemple de configuration de liste de codes

--Créez une classe Enum qui implémente ʻEnumCodeList.CodeListItemfournie par la bibliothèque commune. Dans l'interfaceCodeListItem, ce qui suit est défini comme une méthode d'acquisition des informations (valeur de code et étiquette) nécessaires à la création d'une liste de codes. - getCodeValue() -getCodeList()` --Définissez une constante. À ce stade, spécifiez les informations nécessaires (valeur de code, étiquette).

Lorsque vous utilisez EnumCodeList, l'ordre de la liste de codes est l'ordre de définition des constantes.

--Préparez les propriétés contenant les informations nécessaires pour créer une liste de codes, les constructeurs qui la reçoivent, les valeurs de code que les constantes contiennent et les méthodes qui renvoient des étiquettes.

Utilisation de la liste de codes dans JSP

Identique à l'utilisation de SimpleMapCodeList.

Utilisation de la liste de codes dans la classe Java

Identique à l'utilisation de SimpleMapCodeList.

2.5. Comment utiliser SimpleI18nCodeList

Une liste de codes qui prend en charge l'internationalisation. Vous pouvez définir une liste de codes pour chaque langue et renvoyer la liste de codes correspondant à la langue.

Exemple de configuration de liste de codes

Il est facile de comprendre si vous imaginez un tableau à deux dimensions où la ligne est «Locale», la colonne est la valeur de code et le contenu de la cellule est l'étiquette. Il existe trois façons de le définir, mais la méthode consistant à «définir la liste de codes pour chaque région sur une base ligne par ligne» est recommandée.

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>

Pour la liste de codes pour chaque Locale, les "SimpleMapCodeList" et "JdbcCodeList" mentionnés ci-dessus peuvent être préparés. Pour le moment, SimpleI18nCodeList ne prend pas en charge le rechargement, et il est nécessaire de le supporter par sa propre implémentation.

2.6. Afficher le nom de code à partir d'une valeur de code spécifique

Lors du référencement de la liste de codes à partir de JSP, elle peut être référencée de la même manière que l'interface Map. Exemple: ʻOrder Status: $ {f: h (CL_ORDERSTATUS [orderForm.orderStatus])} ` (En spécifiant la valeur stockée dans la valeur de code (orderStatus dans cet exemple) comme clé d'interface de carte acquise, le nom de code correspondant peut être affiché.)

2.7. Vérification de la saisie des valeurs de code à l'aide de la liste de codes

Lors de la vérification si la valeur d'entrée est une valeur de code définie dans la liste de codes, la bibliothèque commune fournit une annotation pour BeanValidation, ʻorg.terasoluna.gfw.common.codelist.ExistInCodeList`. (À ce stade, le message d'erreur par défaut doit être modifié en fonction des exigences de l'application)

Exemple de configuration de @ ExistInCodeList

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
}

Les seuls types pris en charge par la vérification d'entrée @ExistInCodeList sont les classes d'implémentation d'interface CharSequence (telles que String) ou Character. Par conséquent, même si le champ avec @ExistInCodeList est sémantiquement un type entier, il doit être défini comme une chaîne. (Année / Mois / Jour, etc.) De plus, comme @ExistInCodeList ne prend pas en charge les valeurs de la collection, il est nécessaire de concevoir une implémentation pour que l'annotation @ExistInCodeList corresponde à plusieurs éléments d'écran sélectionnables (cases à cocher, liste déroulante de sélection multiple, etc.). y a-t-il.

  1. How to extend

3.1. Lors du rechargement de la liste de codes

Lorsque vous mettez à jour les données de base de la liste de codes, vous pouvez également mettre à jour la liste de codes. La bibliothèque commune fournit l'interface ʻorg.terasoluna.gfw.common.codelist.ReloadableCodeList`. En implémentant cela et en appelant la méthode de rafraîchissement, la liste de codes peut être mise à jour. Il existe deux façons de mettre à jour la liste de codes.

** Les directives recommandent une méthode de rechargement périodique de la liste de codes à l'aide du planificateur de tâches fourni par Spring. ** ** (Si vous devez actualiser à tout moment, vous pouvez utiliser Controller)

Actualiser avec le planificateur de tâches

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. Spécifiez la taille du pool de threads dans l'attribut pool-size de <tâche: planificateur>. (1 par défaut)
  2. Définissez l'ID de <tâche: planificateur> dans l'attribut du planificateur de <tâche: tâches-planifiées>.
  3. Spécifiez la méthode de rafraîchissement dans l'attribut de méthode de <tâche: planifiée>. Décrivez dans l'attribut cron au format pris en charge par ʻorg.springframework.scheduling.support.CronSequenceGenerator`. Comme on s'attend à ce que le temps de rechargement de l'attribut cron change en fonction de l'environnement, il est recommandé de l'obtenir à partir du fichier de propriétés ou des variables d'environnement.

Appelez la méthode de rafraîchissement dans la classe Contoller (Service)

3.2. Comment personnaliser votre propre liste de codes

Si cela ne peut être réalisé avec les quatre types de listes de codes fournis par la bibliothèque commune, personnalisez-la vous-même. Il existe deux types de listes de codes qui peuvent être créés. --ʻAbstractCodeList Rechargeable Utilisé lorsqu'il n'est pas nécessaire. Remplacez ʻasMap. --ʻAbstractReloadableCodeListUtilisé lorsque Rechargeable est requis. RemplacezretrieveMap`.

Classe de liste de codes

À titre d'exemple, prenons une liste de codes qui crée une liste pour l'année prochaine.

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. Enregistrez la liste de codes en tant que composant avec @ Component. En valeur, la liste de codes est enregistrée en tant que composant par l'interception de liste de codes définie dans la définition du bean.
  2. Héritez de ʻAbstractCodeList`.
  3. Injectez JodaTimeDateFactory. Vous pouvez créer une classe Date pour les dates système.
  4. Remplacez la méthode ʻasMap () `pour créer une liste de cette année et de l'année prochaine.

Si vous personnalisez vous-même la CodeList rechargeable, implémentez-la pour qu'elle soit thread-safe.

  1. Appendix

4.1. Comment définir la liste de codes de SimpleI18nCodeList

Pour les méthodes autres que celles décrites au point 2.5.

Définir la carte pour chaque locale ligne par ligne

Définissez "Map of Map" pour la propriété rows. Définissez d'abord les paramètres régionaux sur la carte externe et définissez la valeur de chaque clé sur la carte interne.

Définir la carte pour chaque valeur de code pour chaque colonne

Déterminez d'abord la clé sur la carte extérieure et définissez les paramètres régionaux et la valeur correspondante sur la carte intérieure.

Références: Guide de développement de TERASOLUNA Server Framework for Java (5.x)

Recommended Posts

Résumez par vous-même le guide de développement TERASOLUNA Server Framework for Java (5.x): 4.8 Liste de codes
[Développement] Comparaison du framework Java
Paramètres de renforcement d'installation et de complétion de code d'Eclipse (développement Mac pour Java)
Présentation de Spring Boot2, un framework Java pour le développement Web (pour les débutants)