next up previous contents index
Search Next: IOWA: Interpreted Objects for Up: Facet: Web Application Framework Previous: Installation   Contents   Index

Action-Controller

Eine Stärke des Frameworks besteht darin, dass alle Anfragen automatisch an eine programmierbare "`Action"' geleitet werden. Dabei entspricht die URL /SecureOne/Login.wapp der Action-Pfad /SecureOne/Login. Die Datei map.xml bestimmt, welcher Action-Controller für eine gegebene Action aufgerufen wird. Bei Bedarf wird mit form noch ein Formular angeführt, über das Eingaben vorgenommen werden können. Die Default-Action muss deklariert sein, sie wird verwendet, wenn keine bestimmte Aktion angegeben wurde. Im Beispiel wird die Seite ausgegeben, die vom default.xsl-Dokument erzeugt wurde.

<WebApp-Config>
 <Action-Mapping>
  <Action path="/Default"
          type="Wapp/DisplayPageAction">
   <Forward name="success" path="default"/>
  </Action>
  <Action path="/SecureOne/Login"
          type="SecureOne/AuthenticateUserAction"
          form="SecureOne/AuthenticationFormModel">
   <Forward name="success" path="welcome"/>
   <Forward name="failure" path="relogin"/>
  </Action>
 </Action-Mapping>
</WebApp-Config>

In dem mitgelieferten Facet-Beispiel enthält die Defaultseite ein Formular für die Eingabe von Benutzername und Kennwort. Wird also /SecureOne/ im Browser aufgerufen, sollte der Benutzer Name und Kennwort eingeben. Nach Abschicken des Formulars sucht Facet die zur Formular-Action gehörende Facet-Action heraus und führt die in AuthenticationFormModel festgelegte Gültigkeitsprüfung aus.

class AuthenticationFormModel
  # Zugriff auf Formularfelder
  attr_accessor :userName, :password

  def validate
    return false if @userName.nil? ||
      @userName.length < 6
    return false if @password.nil? ||
      @password.length < 6
    return true
  end
end

Ist diese erfolgreich, wird die AuthenticateUserAction-Methode process ausgeführt. Über das formObject hat die Methode Zugriff auf die vom Formular mit GET oder POST übermittelten Daten.

def process(httpRequestResponse,formObject)
  userName = formObject.userName
  password = formObject.password

  bo = UserAuthenticationBO.new
  isValidUser = bo.validateUser(userName,password)

  if isValidUser then
    httpRequestResponse.forward = "success"
  else
    httpRequestResponse.forward = "failure"
  end
end

Die eigentliche Arbeit wird von dem "`Business-Object"' bo erledigt, das als Domänenobjekt von der Benutzeroberfläche vollkommen abgekoppelt ist. Dieser mehrlagige Zugang hat den großen Vorteil, dass die komplexe Domänenlogik nur einmal in einem allgemein zugänglichen Backend implementiert werden muss, während sich das Frontend allein um die Interaktion mit dem Benutzer kümmert.


next up previous contents index
Search Next: IOWA: Interpreted Objects for Up: Facet: Web Application Framework Previous: Installation   Contents   Index
(C) 2002 by dpunkt.de, Armin Roehrl, Stefan Schmiedl, Clemens Wyss 2002-01-20