Il linguaggio di espressione JSP può fornire sicurezza di tipo come scriptlet in Eclipse IDE?

0

Quasi ovunque puoi leggere che dovresti usare EL invece di script in JSP. E Sono d'accordo sul fatto che non devi utilizzare alcun codice JAVA in JSP ad eccezione di chiamare metodi getter sugli oggetti modello . Questo è abbastanza ovvio per me e non ho bisogno di alcun chiarimento qui. Ma c'è questa cosa che davvero non riesco a capire è la mancanza di supporto per EL in Eclipse IDE.

Iniziamo con il confronto di alcuni codici. Primo esempio EL:

${user.name}
${user.surname}

E ora qualche esempio di espressione scriptlet / JSP:

<jsp:useBean id="user" class="com.mycompany.User">
    <%= user.getName() %>
    <%= user.getSurname() %>
</jsp:useBean>

È chiaramente visibile che EL è più elegante. Tuttavia, Eclipse non fornisce alcun supporto automatico o supporto per refactoring per EL. E per le espressioni JSP funziona come un fascino. Se si elimina il metodo getName () dalla classe Java, il validatore JSP mostrerà un errore durante la compilazione. Se si rinomina il metodo, tutti i file JSP connessi si aggiorneranno automaticamente. Inoltre, anche quando cerchi riferimenti al metodo getName (), Eclipse mostrerà tutte le chiamate attraverso i file Java / JSP (a patto che tu abbia usato espressioni JSP / scriptlet). E nessuna di queste funzionalità è disponibile per EL.

Alcuni programmatori potrebbero dire che a loro non interessa molto e la sintassi EL è molto meglio per loro, punto. Ma lavoro con un codice legacy piuttosto complesso (che non ho scritto) nel mio progetto attuale e mi crede che il refactoring di oggetti EL / model sia un incubo. Esistono molti oggetti DTO che estendono e compongono altri oggetti DTO che vengono utilizzati su più viste JSP. Ogni cambiamento è difficile, perché non posso dire in fase di compilazione se non ho infranto nulla.

Sulla base di questa esperienza, non riesco a capire come qualcuno possa suggerire di usare EL invece delle espressioni JSP. Per favore dimmi che mi manca qualcosa e che sia usando le espressioni JSP sia corretto (nel mio esempio) o che c'è un modo per abilitare tutti i vantaggi dell'uso della sicurezza di tipo con EL.

EDIT:
So che IntelliJ ha un supporto migliore per JSP, ma vorrei prima concentrarmi su Eclipse. Spero che ci siano ancora alcune persone che lavorano a progetti JSP su Eclipse / Spring Tool Suite.

    
posta Kacper86 23.05.2014 - 23:40
fonte

1 risposta

1

Ogni IDE ha i suoi punti positivi e punti negativi. Un ottimo punto di forza di Eclipse è il suo prezzo. Esistono altri IDE (ad esempio Intellij ) con funzionalità complete di jsp aware. Sebbene ci siano modi per aggirare questo aggiungendo ulteriori informazioni sul tipo ai bean che dovrebbero aiutare in tutti IDE.

Detto questo, la domanda reale qui:

Based on that experience I just cannot understand how anybody could suggest using EL instead of JSP expressions. Please tell me that I'm missing something and that either using JSP expressions is correct (in my example) or that there is a way to enable all the advantages of using type safety with EL.

Ecco la vera risposta ... hai inserito un po 'di codice Java.

  • Come collaudi il codice che hai scritto? Non è possibile testare unitamente uno scriptlet o una pagina jsp. puoi unità testare un taglib.
  • Non puoi riutilizzare gli scriptlet, quindi stai violando DRY
  • Non puoi eseguire il debug di un'eccezione in parte (ottieni una pagina vuota)
    • Poiché il JSP è compilato in fase di runtime, è possibile / probabile ottenere un'eccezione di compilazione con scriptlet estremamente difficili da rintracciare ... in fase di esecuzione.
  • Non puoi utilizzare l'ereditarietà per loro (non possono essere estesi o incapsulati)
  • Tu fai ottieni collisioni nello spazio dei nomi e $ {diety} ti aiuta se <%@ include ... %> qualcosa che ha una collisione tra i nomi in file diversi
  • Tu sei mescolando insieme logica di visualizzazione e logica aziendale
  • Gli strumenti di refactoring automatico non li riconoscono

Anche se non sono intrinsecamente malvagi e ci sono a volte compiti necessari da fare con loro, sono spesso una cosa significativa e brutta che causa problemi lungo la strada.

Lettura correlata:

risposta data 24.05.2014 - 03:26
fonte

Leggi altre domande sui tag