Maison >Java >javaDidacticiel >La route vers l'apprentissage sur le Web (2) Essai OGNL front-end

La route vers l'apprentissage sur le Web (2) Essai OGNL front-end

黄舟
黄舟original
2016-12-23 16:29:331417parcourir

1. L'importance de l'émergence de l'OGNL

Dans mvc, c'est un fait incontestable que les données circulent entre différents niveaux. Et ce type de circulation sera également confronté à certaines difficultés. Ces difficultés sont causées par les différentes manifestations des données dans différents mondes :

a Les données sont plates sur la page sans type de chaîne. La complexité de votre structure de données ou la richesse du type de données, lorsqu'il s'agit d'afficher, elles seront toutes traitées de la même manière et deviendront des chaînes et affichées sur la page.

b. Les données peuvent être représentées par des structures de données et des types de données riches dans le monde Java. Vous pouvez définir vos classes préférées et hériter et imbriquer entre les classes. Nous appelons généralement ce modèle une arborescence d’objets complexe. À ce stade, si les données sont transférées entre la page et le monde Java, elles sembleront ne pas correspondre. Cela conduit donc à plusieurs problèmes qui doivent être résolus ;

c. Lorsque les données sont transmises de la couche Vue à la couche Contrôleur, nous devons nous assurer qu'une collecte de données plate et dispersée peut être définie selon certaines règles. Accédez à l'arborescence des objets dans le monde Java. En même temps, il peut convertir intelligemment les types de chaînes en différents types en Java ;

d. Lorsque les données sont transmises de la couche Contrôleur à la couche Vue, nous devons nous assurer que la couche Vue peut utiliser certains éléments simples. règles Accéder à l'arborescence des objets. Dans le même temps, le format d'affichage des données dans l'arborescence des objets est contrôlé dans une certaine mesure.

Si nous réfléchissons un peu plus à ce problème, nous constaterons que résoudre le problème de l'inadéquation des flux de données due à différentes formes de présentation ne nous est en fait pas étranger. Le même problème se produit dans le monde Java et dans le monde des bases de données. Face à cette inadéquation entre modèles objet et relationnel, la solution que nous adoptons est d'utiliser des frameworks ORM, comme Hibernate, iBatis, etc. Alors maintenant, une inadéquation se produit également dans la couche Web, nous devons donc également utiliser certains outils pour nous aider à résoudre le problème. Afin de résoudre l'inadéquation lorsque les données sont transmises de la couche View à la couche Controller, Struts2 adopte une solution parfaite de XWork. Et sur cette base, un mécanisme parfait a été construit pour résoudre parfaitement l’inadéquation du flux de données. La solution OGNL est née

2. Combat réel du projet OGNL

OGNL est l'abréviation de Object-Graph Navigation Language. C'est un langage d'expression puissant qui utilise une syntaxe de formule simple et cohérente. , vous pouvez accéder à tous les attributs de l'objet, appeler les méthodes de l'objet,
parcourir le diagramme structurel de l'objet entier et implémenter des fonctions telles que la conversion de type de champ.

a. OGNL nous permet d'accéder à la couche d'objets avec des expressions très simples [OGNL prend en charge la recherche de valeur clé pour la carte]

Vous pouvez cliquer directement sur les propriétés de l'objet,

Par exemple, si l'attribut utilisateur est une liste, nom du premier objet utilisateur

Par exemple, l'attribut utilisateur est une carte >

b. Les opérateurs sont pris en charge (tels que -*/), qui ont un degré de liberté plus élevé et des fonctions plus puissantes que les indicateurs ordinaires


c. Prend en charge les appels de méthodes d'objet, tels que xxx.doSomeSpecial()

d. Prend en charge les appels de méthodes statiques de classe et l'accès aux valeurs, le format d'expression est @[ nom complet de la classe (y compris le chemin du package)]@[ Nom de la méthode | Nom de la valeur], par exemple : @java.lang.String@format('foo %s', 'bar') ou @tutorial.MyConstant@APP_NAME


e. Prend en charge les opérations d'affectation et la concaténation d'expressions, telles que price=. 100, discount=0.8, calculatePrice(price*discount) , cette expression renverra 80

f Accédez au contexte OGNL et à ActionContext

g. Vous pouvez également créer de nouveaux objets via le constructeur de n'importe quel. objet de classe

/**nouveau Java.net.URL("xxxxxx/")

**/

h.OGNL prend en charge la projection et la sélection similaires à celles de la base de données.

La projection consiste à sélectionner les mêmes attributs de chaque élément de l'ensemble pour former un nouvel ensemble, similaire à l'opération de terrain d'une base de données relationnelle. La syntaxe de l'opération de projection est collection.{XXX}, où XXX est la propriété publique de chaque élément de cette collection.

/**group.userList.{username} obtiendra une liste des noms de tous les utilisateurs d'un groupe

**/

La sélection consiste à filtrer les éléments définis qui répondent aux conditions de sélection, similaire à l'opération d'enregistrement d'une base de données relationnelle. La syntaxe de l'opération de sélection est la suivante : collection.{X YYY}, où X est un opérateur de sélection, suivi de l'expression logique de la sélection. Il existe trois opérateurs de sélection :

? Sélectionne tous les éléments qui satisfont à la condition
^ Sélectionne le premier élément qui satisfait à la condition
$ Sélectionne le dernier élément qui satisfait à la condition

/**group.userList.{? #txxx.xxx != null} obtiendra une liste des utilisateurs d'un groupe dont le nom n'est pas vide
**/

i. OGNL est généralement utilisé en conjonction avec les signes Struts 2, principalement l'utilisation des trois symboles #, % et $. La méthode d'utilisation est la suivante :

/**Accès au contexte OGNL et au contexte d'action, #équivalent à ActionContext.getContext(); le tableau suivant a plusieurs propriétés utiles dans ActionContext :

parameters Map #parameters.id[0] contenant les paramètres de la requête HTTP actuelle est équivalent à request.getParameterValues("id").get(0);

request Map #request contenant les attributs de la HttpServletRequest actuelle .userName est équivalent à request.getAttribute("userName")session, qui contient la Map des attributs de la HttpSession actuelle. #session.userName est équivalent à la Map de l'application session.getAttribute("userName"), qui contient l'application. attributs du ServletContext actuellement appliqué. #application.userName est équivalent à application.getAttribute("userName")

attr est utilisé pour accéder à ses attributs (attributs) dans la requête > session > userName est équivalent aux trois ci-dessus dans l'ordre Lire l'attribut userName dans la portée jusqu'à ce qu'il soit trouvé
est utilisé pour filtrer et projeter des collections,
telles que des livres.{?#this.price<100}; 🎜> pour construire une Map, telle que # {'foo1':'bar1', 'foo2':'bar2'}. Le symbole

%" est utilisé pour calculer la valeur de l'expression OGNL lorsque l'attribut du drapeau est de type chaîne.

"$" a deux utilisations principales, utilisé en internationalisation Dans le fichier de ressources , faites référence à l'expression OGNL. Dans le fichier de configuration

/**

j, OGNL peut obtenir l'action en arrière-plan get() set() de transmission de la méthode dans Struts 2 et i18n. Les données entrantes sont affichées de manière flexible à la réception

Ce qui précède est le contenu de l'essai OGNL frontal sur le parcours d'apprentissage Webwork (2). Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois. (www.php.cn)



Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn