| 

.NET C# Java Javascript Exception

HTML mit Groovy-Template und Groovy-Skript

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


HTML mit Groovy-Template und Groovy-Skript

Wicki - 18.08.2010 10:56
Hallo,

folgendes Szenario:
HTML-Datei mit Groovy-Template-Code
Groovy-Skript mit einer Funktion, die vom Template benutzt werden soll
Abarbeitung des Ganzen unter Tomcat

Wenn ich das Skript weglasse und statt der Fehler-Anweisung nur die Funktion aus dem Skript einfach in das
Template einbette funktioniert das Ganze.
Problem: Ich möchte die Funktion nicht einbetten sondern auf das Skript wie folgt verweisen:
def check = new KreditkarteSkript()
Das führt zu dem Fehler:
javax.servlet.ServletException: Creation of template failed: groovy.lang.GroovyRuntimeException: Failed to parse template script (your template may contain an error or be trying to use expressions not currently supported): startup failed:
SimpleTemplateScript2.groovy: 32: unable to resolve class KreditkarteSkript 
 @ line 32, column 16.
   			def check = new KreditkarteSkript()
                  ^

Hier nun der Code der HTML-Datei, Template zwischen <% ... %>:
<html>
  <head>
    <title>Kreditkartentest</title>
  </head>
  <body>
    <form action='Kreditkarten.html' method='post'>
      <h1 style='color:red'>Kreditkartentest</h1>
      <table border='0'>
        <tr>
          <td>Nummer der Kreditkarte</td>
          <td> </td>
          <td>
            <input type='text' name='Nummer' />
          </td>
          <td> </td>
          <td>
            <select name='Hersteller'>
              <option>1 - MasterCard</option>
              <option>2 - Visa</option>
              <option>3 - AmericanExpress</option>
            </select>
          </td>
        </tr>
      </table>
      <%
		def nummer = params.Nummer
		def hersteller = params.Hersteller
		def farbe = 'black'
		def text = ''
		if(nummer) {
			def check = new KreditkarteSkript()
			def erg = check.nummerGueltig(hersteller[0], nummer)
			switch(erg) {
			case Boolean:
			    if(erg) {
					farbe = 'green'
					text = 'Die Nummer ist RICHTIG'
			    } else {
					farbe = 'red'
					text = 'Die Nummer ist FALSCH'
	    		}
				break
			case String:
				farbe = 'red'
				text = erg
				break
			}
		}
%>
      <h2 style='color:${farbe}'>${text}</h2>
      <input type='submit' value='Nummer prüfen' />
    </form>
  </body>
</html>

Es folgt das Skript:
  def input = new BufferedReader(new InputStreamReader(System.in))
  println 'Kreditkartentest'
  println '----------------'
  def nummer
  def hersteller
  def herstellerMap = [ 1 : 'MasterCard', 2 : 'Visa', 3 : 'AmericanExpress']
  while(true) {
	println 'Liste der Hersteller: ' + herstellerMap
	print 'Bitte geben Sie die Nummer des Herstellers ein: '
	hersteller = input.readLine()
	if(nummer == null || nummer.length() == 0)
		break
	print 'Bitte geben Sie eine Kreditkartennummer ein: '
	nummer = input.readLine()
	if(nummer == null || nummer.length() == 0)
		break
	def erg = nummerGueltig(hersteller, nummer)
	switch(erg) {
	case Boolean:
	    if(erg)
			println('Die Nummer ist RICHTIG')
		else
			println('Die Nummer ist FALSCH')
		break
	case String:
		println erg
		break
	}
  }
  
  def nummerGueltig(hersteller, nummer) {
	if(hersteller < '1' || hersteller > '3')
	  return 'Der Hersteller ist ungültig'
	if(nummer == null)
      return 'Die Nummer ist null'
	if (nummer.length() == 13 && nummer[0] == "4")
	  return true
	else
	  return false
  }

und die web.xml:
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
    "[java.sun.com]; >

<web-app>
    <display-name>Groovlet Demonstrator</display-name>
    <description>
        Groovlets and Templates
    </description>
    <servlet>
        <servlet-name>Groovy</servlet-name>
        <servlet-class>groovy.servlet.GroovyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Groovy</servlet-name>
        <url-pattern>*.groovy</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>Template</servlet-name>
        <servlet-class>groovy.servlet.TemplateServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Template</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>
</web-app>

Ich habe auch schon das Skript separat kompiliert aber ohne Erfolg.
Bitte um Hilfe.

Gruß Wicki


Re: HTML mit Groovy-Template und Groovy-Skript

Wicki - 20.08.2010 16:21
Hallo,

mein Problem ist offensichtlich kein Problem der Codierung. Ich habe das Groovy-Skript separat übersetzt mit groovyc und die resultierenden Klassen versuchsweise in die "groovy-all-1.7.3.jar" in Tomcats lib-Verzeichnis gestellt. Danach funktioniert das Ganze. Wenn ich jedoch diese Klassen nach Web-inf\classes oder eine entsprechende jar-Datei nach Web-inf\lib stelle kommt wieder der alte Fehler. Liegt das möglicherweise bei der Template-Generierung, die diese Verzeichnisse ignoriert ?

Gruß Wicki


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "HTML mit Groovy-Template und Groovy-Skript" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.