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.
infomation
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.
SimpleMapCodeList
Utilise le contenu décrit directement dans le fichier xml.
--NumberRangeCodeList
Utilisé lors de la création d'une liste de plages numériques.
--JdbcCodeList
Obtenez le code cible de DB avec SQL et utilisez-le.
--ʻEnumCodeList ʻEnum
Utilisé lors de la création d'une liste de codes à partir des constantes définies dans la classe.
--SinpleI18nCodeList
Utilisez la liste de codes selon java.util.Locale.
Tiré de Guidelines
Lisez la valeur de code définie dans le fichier xml lors du démarrage de l'application et utilisez-la telle quelle.
--Il est recommandé de créer le fichier de définition du bean (xxx-codelist.xml) pour la liste de codes.
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).
Définition du bean de la classe CodeListInterceptor. En définissant <propery name =" CodeListIdPattern "value =" CL_. + "/>
, Le modèle beanID de la liste de codes automatiquement défini dans la portée de la requête est les données dont l'id est défini au format "CL_XXX". Ne peut être ciblé. L'ID de bean qui s'applique ici sera disponible dans JSP.
Si vous omettez codeListPattern
, toutes les listes de codes seront disponibles dans JSP.
Implémentez-le dans JSP (dans le cas de la boîte de sélection). Une valeur factice peut être définie au début en définissant un caractère vide pour --value.
En définissant <form: options items =" $ {CL_XXX} "/>
, les options qui s'appliquent à l'ID de bean sont affichées.
Injectez la liste de codes en utilisant @ Inject
et @ Named
. Pour @ Named
, spécifiez l'ID de la liste de codes.
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.
--<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)
Identique à l'utilisation de SimpleMapCodeList.
Identique à l'utilisation de SimpleMapCodeList.
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`.
--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éfinissez
fetchSize. 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`.
Identique à l'utilisation de SimpleMapCodeList.
Identique à l'utilisation de SimpleMapCodeList.
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.
--Créez une classe Enum qui implémente ʻEnumCodeList.CodeListItemfournie par la bibliothèque commune. Dans l'interface
CodeListItem, 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.
Identique à l'utilisation de SimpleMapCodeList.
Identique à l'utilisation de SimpleMapCodeList.
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.
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>
rowsByCodeList
sur Map with key java.lang.Locale
. Dans Map, spécifiez les paramètres régionaux dans key et la destination de référence de la classe de liste de codes correspondant aux paramètres régionaux dans value-ref. La valeur de la carte fait référence à la classe de liste de codes correspondant à chaque paramètre régional.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.
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é.)
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)
@ 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
}
@ ExistInCodeList
pour le champ dont vous voulez vérifier l'entrée, et spécifiez la liste de codes à vérifier dans cordListId.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.
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)
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>
<tâche: planificateur>
. (1 par défaut)<tâche: planificateur>
dans l'attribut du planificateur de <tâche: tâches-planifiées>
.<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.ReloadableCodeList
est définie pour le type de champ. Par conséquent, il est nécessaire d'implémenter ReloadableCodeList
au stade de la définition du bean.
--Définissez la méthode d'actualisation dans la classe Service et exécutez la méthode d'actualisation de l'interface ReloadableCodeList.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. Remplacez
retrieveMap`.
À 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);
}
}
@ 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.JodaTimeDateFactory
. Vous pouvez créer une classe Date pour les dates système.Si vous personnalisez vous-même la CodeList rechargeable, implémentez-la pour qu'elle soit thread-safe.
Pour les méthodes autres que celles décrites au point 2.5.
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é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.
Recommended Posts