# bean methode von jslt aufrufen



## krackmoe (16. Mrz 2010)

Wie kann ich denn von meiner Datenbank bean, die checkSession Methode aufrufen!? Check das irgendwie nicht Ganz? Er sagt immer prefix ist falsch? Es handelt sich um Zeile 14...


```
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<jsp:useBean id="db" class="beans.Datenbank" scope="session" />
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>	
	<c:if test="${param.wrong == 'true'}"><c:out value="Username oder Password vergessen"/></c:if>
	<c:choose>
		<c:when test="${db.checkSession(session.getId)}">
			<form action="login.jsp" method="post">
				Name: <input type="text" name="username" maxlength="20"/><br>
				Passwort: <input type="password" name="password" maxlength="20"/><br>
				<input type="submit" value="Submit"/>
			</form>
		</c:when>
		<c:otherwise><c:redirect url="login.jsp"/></c:otherwise>
	</c:choose>
</body>
</html>
```


----------



## krackmoe (16. Mrz 2010)

Grad gecheckt dass ich mir eine eigene tld anlegen muss..

Müssen die Methoden in der Bean alle setXXXXX heißen damit ich das in der tld so definieren kann?
Weil meine Methode ist eigentlich keine setter sondern eine getter..


----------



## maki (16. Mrz 2010)

Du brauchst keine TLD, aber eine richtige Bean 


```
public SimpleBean() {

   private int number;

   public int getNumber() { return number; }

   public void setNumber(final int number) {
        this.number = number;
   }
}
```


----------



## krackmoe (16. Mrz 2010)

Naja..bei mir schaut das so aus:

beans:

```
public class Datenbank{
      public boolean getCheckSession(String sessionid){ 
            ....
            return true;
      }
}
```

index.jsp (nur die teile die damit zu tun haben):

```
<jsp:useBean id="db" class="beans.Datenbank" scope="session" />
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:when test="${db.CheckSession(session.getId()}">
```

Das haut nicht hin! 
org.apache.jasper.JasperException: javax.el.PropertyNotFoundException: Property 'CheckSession' not found on type beans.Datenbank


----------



## maki (16. Mrz 2010)

Dass du keine Java Code (Scriptlets) in JSPs haben sollst wurde ja in deinem anderen Thread geklärt.
Hhier erfährst du dass so "komplexe" Dinge wie [c]db.CheckSession[/c] nix in JSPs zu suchen haben, dass macht man in Javaklassen wie zB. Servlets, dafür sind sie da, JSPs kümmern sich ausschliesslich um die Darstellung


----------



## krackmoe (16. Mrz 2010)

Mh.. ich bin ja gerade dabei das umzuarbeiten.. D.h. dieser Ansatz ist wieder falsch und ich soll ALLES in das Servlet auslagern!?
Bis auf den HTML Code? Und wie mach ich dann die Abfragen an den ganzen Stellen, wenn ich keine Logik drin haben soll?
Nach was für einem Thema soll ich denn da bitte googeln...?

Im mom schaut meine index.jsp nämlich so aus:

```
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<jsp:useBean id="db" class="beans.Datenbank" scope="session" />
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="test2" uri="/WEB-INF/tags.tld"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>	
	<c:if test="${param.wrong == 'true'}"><c:out value="Username oder Password vergessen"/></c:if>
	<c:choose>
		<c:when test="${db.CheckSession(session.getId()}">
			<form action="login.jsp" method="post">
				Name: <input type="text" name="username" maxlength="20"/><br>
				Passwort: <input type="password" name="password" maxlength="20"/><br>
				<input type="submit" value="Submit"/>
			</form>
		</c:when>
		<c:otherwise><c:redirect url="login.jsp"/></c:otherwise>
	</c:choose>
</body>
</html>
```


----------



## krackmoe (17. Mrz 2010)

Ich check nicht ganz, was ich in ein Servlet packen soll und was in eine JSP.
Weil dann könnte ich ja alles was ich bisher hab in ein Servlet packen, weil überall Skriptlets drin sind..
Oder ich wandel die Skriptlets soweit es geht in JSLT Tags um... !?


----------



## Antoras (17. Mrz 2010)

Generell tust du dir am einfachsten damit mit der JSTL nur Dinge zu überprüfen, die am Schluss mit dem View zu tun haben. Alles andere kommt in die Java-Klassen.
Das bedeutet, dass die Überprüfung, ob jemand eingeloggt ist, in den Java-Klassen erfolgt. Dort setzt du dann eine Variable, die angibt ob die Person eingeloggt ist, oder eben nicht. In der JSP überprüfst du dann nur noch den Zustand dieser Variable.

Die JSP mit dem Namen login.jsp:

```
...
<c:choose>
<c:when test="${isLoggedIn}">
<form action="login" method="post">
  Name: <input type="text" name="username" maxlength="20"/><br>
  Passwort: <input type="password" name="password" maxlength="20"/><br>
  <input type="submit" value="Submit"/>
</form>
</c:when>
<c:otherwise>
You are logged in!
</c:otherwise>
</c:choose>
...
```

Das Servlet, das POST- und GET-Methoden überprüft. Die 
	
	
	
	





```
doGet(...)
```
 Methode muss vorhanden sein, da du damit auf die JSP weiterleitest wenn das Formular nicht abgeschickt wurde.

```
public class LoginServlet extends HttpServlet {

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    handleResponse(req, resp);
  }

  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    ...
    if (db.CheckSession(session.getId()) {
      req.setAttribute("isLoggedIn", "true");
    } else {
      req.setAttribute("isLoggedIn", "false");
    }
    handleResponse(req, resp);
  }

  protected void handleResponse(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    RequestDispatcher r = req.getRequestDispatcher("/login.jsp");
    r.forward(req, resp);
  }
}
```

Der Inhalt der web.xml (Deployment Descriptor):
[XML]...
<servlet>
  <servlet-name>loginServlet</servlet-name>
  <servlet-class>any.packages.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>loginServlet</servlet-name>
  <url-pattern>/login</url-pattern>
</servlet-mapping>
...[/XML]


----------

