2008-10-29 5 views
1

Je pensais à l'idée d'utiliser Ajax au lieu de TagLib. Le moyen le plus élégant serait: Utiliser Java Annotation. L'idée est, les concepteurs ou tout le monde peut faire le HTML sans taglib, en utilisant simplement les balises HTML "standard" avec identifiant ou nom, et appelez le Javascript. De cette façon, n'importe quel WYSIWYG peut être utilisé, les développeurs n'ont pas à se soucier du format HTML ou de la façon dont il est conçu. Dans beaucoup (au moins open source) WYSIWYG n'affiche pas les taglibs dans ce résultat final (ou en possède un modèle), il est donc difficile de "prévisualiser". Une autre raison est, développeur devrait savoir Java et HTML/TagLibs ne devrait pas être un must-have, car nous avons eu CSS et AJAX.Utilisez AJAX au lieu de TagLib?

Il devrait fonctionner comme ça:

MyClass.java:

import ... 

// Use the ResourceBundle resource[.{Locale}].properties 
@Jay2JI18n(resourceBundle="org.format.resource",name="MyClassForm") 
public class MyClass { 
    private Integer age; 
    private String name 
    private Date dob; 
    private salary; 

    @Jay2JLabel(resource="label.name") 
    @Jay2JMaxLength(value=50,required=true,) 
    @Jay2JException(resource="exception.message") 
    public String getName() { 
     ... 
    } 
    public void setName(String name) { 
     if (name.trim().equal("")) { 
      throw new Exception("Name is required"); 
     } 
    } 
    /* Getter and setter for age */ 
    ... 
    @Jay2JLabel(message="Salary") 
    @Jay2JFormat(format="##,###.00",language="en") 
    @Jay2JFormat(format="##.###,00",language="pt_BR") 
    // or you could use that to access a property of the ResourceBundle 
    //@Jay2I18nResource(resource="money.format") 
    public Date getSalary() { 
     ... 
    } 
    /* Setter for salary and getter/setter for the rest */ 
    ... 
} 

page.html:

<html> 
    <head> 
    <SCRIPT> 
    </SCRIPT> 
    </head> 
    <body> 
    <form onload="Jay2J.formalize(this)"> 
    </form> 
    </body> 
</html> 

de celui-ci peut être un HTML avec les champs remplis; PageWithFields.html:

<html> 
    <head> 
    <SCRIPT> 
    </SCRIPT> 
    </head> 
    <body> 
    <form action="myfavoritewaytopostthis" onsubmit="return Jay2J.validate(this)" onload="Jay2J.formalizeExistField(this)"> 
     <label>Name</label><input type="text" name="name" id="name" /> 
     <label>DOB</label><input type="text" name="dateOfBirth" id="dob" /> 
     <label>Salary</label><input type="text" name="salary" id="salary" /> 
     <input type="submit" /> 
    </form> 
    </body> 
</html> 

De cette façon, l'annotation (pas XML, il est comme HTML dans la façon dont il est seulement un autre fichier XML et modifier n'est pas Java) définira comment le HTML sera traitée. De cette façon, le développeur peut arrêter de développer en HTML et utiliser uniquement JAVA (ou JavaScript), pensez-vous que c'est une idée valable?

Répondre

2

Quand je vois le titre de votre sujet je pensais:

Vous ne pouvez pas utiliser Ajax à la place d'un taglib. AJAX est javascript sur le client et le taglib est le code Java sur le serveur.

Après avoir lu votre message je pensais, ah il ce qui est de faire ce que [le texte du lien] [1] ne

Mais pas entrily même.

[1]: http://code.google.com/webtoolkit/ GWT

1

première impression est ... beurk, quelqu'un qui prend cette place aura aucune idée de ce qu'ils cherchent à apprendre votre chemin sans (nouveau, différent, non standard) de faire des choses. Vous pouvez faire quelque chose de similaire en implémentant une balise qui prend un bean (objet value) et peut-être une petite inspection de réflexion/annotation pour émettre le html approprié, et vous économiserez beaucoup de chagrin d'amour sur toute la ligne. Faites en sorte que vos objets valeur implémentent une interface simple que votre tag utilisera pour extraire et formater le code HTML, et vous pouvez probablement obtenir 80-90% de l'endroit où vous essayez d'aller avec 1/2 travail ou moins.

1

Première impression était, WTF. Après avoir lu plus loin, j'ai l'impression que vous essayez d'aborder différemment le problème de la «séparation des préoccupations». Quelques observations sur votre approche.

  1. Requiert l'activation des scripts côté client, ce qui entraîne l'échec des lignes de guidage d'accessibilité. Réinventer la roue: De nombreux frameworks Web comme Tapestry, Wicket tentent de résoudre ces problèmes et ont fait un travail louable.
  2. Sur votre commentaire sur la liaison de Java au HTML, l'exemple de code ne transmet pas l'idée très clairement.formalize() semble créer l'interface utilisateur, ce qui implique que vous avez codé UI (HTML) en Java (Bad Idea? Probablement pas NakedObjects tente de vous modeler des domaines pour UI, probablement oui si vous écrivez un code spécifique à une page)
  3. validate() est invoquée sur onSubmit(), Pourquoi voudrais-je le traiter de manière asynchrone !! Cela mis à part, l'utilisation d'un script java obstructionniste est loin d'être à la mode (séparation des préoccupations à nouveau)
  4. Votre argument sur taglibs empêchant WYSIWIG, bien que justifiable, n'est pas entièrement valide. Les tags ne peuvent pas être utilisés pour composer d'autres tags, chaque tag est une entité unique qui gère le comportement ou qui émet du code html. Votre argument est valable pour le second cas. Cependant, si je comprends bien votre formel() correctement, vous faites la même chose!

Agréable d'entendre de nouvelles idées et bienvenue à SO. En outre, utilisez l'option Modifier la question jusqu'à ce que vous obteniez suffisamment de réputation pour ajouter des commentaires. Ajouter des réponses n'est pas la bonne façon!

1

Cette idée a un certain mérite, si je le comprends correctement.

Vous pouvez utiliser AOP pour modifier une servlet qui sera appelée pour la page. La servlet renvoie alors le code HTML, en utilisant les annotations. De cette façon, les programmeurs ne voient pas la génération html, et si vous avez une bibliothèque javascript standard pour cela, alors cela peut fonctionner.

Mais, tout simplement parce que cela ne veut pas dire que vous devriez le faire. Comme mentionné, il existe de nombreux frameworks qui peuvent cacher le javascript des programmeurs, tels que JSF, qui est essentiellement taglibs et un système de navigation différent. Je me souviens d'avoir utilisé le projet Ruchehive pour faire quelque chose de similaire, c'était une annotation pour pouvoir tout faire en java et ça générait le javascript, il y a quelques années. :)

Questions connexes