Homepage email me grab rss 2.0 feed

Archiv für Schublade Code

iX Gratis Abo

Der Heise Zeitschriften Verlag hat aktuell eine sehr interessante Aktion gestartet: ihr “Magazin für professionelle Informationstechnologie iX” kann 3 Ausgaben lang kostenlos getestet werden – mit dem Vorteil dass die Zustellung danach automatisch endet.

Wer also “Deutschlands führendes Magazin für IT-Profis” unverbindlich testen will, kann das Gratis-Abo noch bis Ende März hier bestellen.

Kein Kommentar

Ajax Funktionalitäten in RichFaces

Mittels dem im RichFaces Framework integrierten Ajax Framework Ajax4jsf lassen sich mittlerweile spielend einfach Ajax Funktionalitäten in JSF Anwendungen implementieren.

Die in Ajax4jsf enthaltenen Komponenten bieten dabei die Möglichkeit bestehende JSF Komponenten um Ajax Funktionalitäten zu erweitern oder JSF Komponenten ganz zu ersetzen. Grundsätzlich können dabei alle JSF Komponenten erweitert werden, erfahrungsgemäß arbeiten die Ajax4jsf Komponenten jedoch am Besten mit den RichFaces Komponenten zusammen.

Das Prinzip möchte ich an einem typischen Ajax-Beispiel vorstellen: dem teilweisen Update einer HTML-Seite beim Sortieren einer Tabelle.

<rich:dataTable id="dataTable" value="#{users}" var="user">
 <rich:column headerClass="sortable">
  <f:facet name="header">
   <a4j:commandLink
    actionListener="#{pageBean.sortDataTable}"
    reRender="dataTable">
    <f:attribute name="sortField" value="getUsername" />
    <h:outputText value="Username" />
   </a4j:commandLink>
  </f:facet>
  <h:outputText value="#{user.username}" />
 </rich:column>
 .
 .
 .
</rich:dataTable>

Um in diesem Beispiel beim Sortieren einer Tabelle nur die Tabelle neu zu rendern, ohne dass ein “kompletter” Neuaufbau der HTML-Seite durchgeführt wird, muss prinzipiell nur der Standard JSF Tag <h:commandLink> durch das Ajax4jsf-Pendant <a4j:commandLink> ersetzt werden.

Dieser Tag bietet die Möglichkeit dem Attribut reRender die ID einer JSF Komponente zu übergeben, welche beim erfolgreichen Ausführen der Methode im Attribut actionListener neu gerendert wird.
Im obigen Beispiel wird durch reRender="dataTable" bestimmt, dass nur die JSF Komponente mit dieser ID (nämlich <rich:dataTable id="dataTable" ...></rich:dataTable>) neu gerendert wird.

Ajax4jsf bietet außerdem viele weitere Ajax Komponenten und Funktionalitäten. Eine Übersicht und genaue Beschreibung dieser Komponenten kann der offiziellen Dokumentation entnommen werden – eine weitere empfehlenswerte Ressource stellt außerdem die RichFaces Live Demo dar, in welcher alle Ajax4jsf Komponenten auch mit Beispielen vorgestellt werden.

2 Kommentare

SCJP – Bestanden!

JavaVor etwas mehr als zwei Monaten habe ich hier schon einmal von meiner Vorbereitung zur SCJP-Zertifizierung berichtet… und heute hatte ich in einem Testcenter in München die Prüfung, welche ich auch ohne größere Probleme bestanden habe. :-)

Sehr empfehlenswert ist in diesem Zusammenhang das Vorbereitungsbuch von Mcgraw-Hill Professional, welches alle relvanten Themen sehr anschaulich und leicht verständlich behandelt. Ohne so ein Buch ist die Prüfung wohl nur sehr, sehr schwer zu bewältigen.

Kein Kommentar

Sun Certified Java Programmer (SCJP)

JavaSeit ein paar Tagen arbeite ich bekanntlich als Consultant für die Entory AG / Softlab Group.

Neben der “normalen” Projektarbeit strebe ich dabei innerhalb der nächsten 6 – 9 Monaten auch eine Java Zertifizierung an – genauer gesagt das Sun Certified Java Programmer (SCJP) Programm, welches einem ein sehr gutes Wissen über die allgemeine Java Welt bescheinigt und außerdem Voraussetzung für weitergehende Spezialisierungen ist.

Ein sehr gute Sache wie ich finde… ;-)

1 Kommentar

Autocomplete Eingabefelder mit Ruby on Rails

Ruby on RailsWohl mit keinem anderen Webdevelopment-Framework ist es leichter kleine & nette Ajax-Effekte zu erstellen wie mit Ruby on Rails – ganz einfach deshalb weil sie in Ruby on Rails schon integriert sind.

Wie einfach man z.B. ein Autocomplete für Textfelder bastelt (dass sich die Daten aus einer Datenbank zieht) will ich nachfolgend aufzeigen.

Zuerst erstellt man eine Tabelle in einer Datenbank und achtet dabei auf die Namenskonventionen bei Rails – d.h. Feldnamen und Tabellennamen grundsätzlich in Kleinbuchstaben und Tabellennamen im Plural.

create table movies (
  id int not null auto_increment,
  name varchar(100) not null,
  primary key(id)
);

Die Tabelle kann nun mit Beispiel-Filmen befüllt werden – wer zu faul ist welche einzugeben kann einfach die SQL-INSERTs von folgender txt-Datei nehmen (enthält die laut Internet Movie Database 250 besten Filme aller Zeiten): movies.txt

Nun erstellt man wie gewohnt das Model für die Tabelle:
ruby script/generate model movie

Und dann den Controller:
ruby script/generate controller movie

In den Controller muss nun noch die Methode für Autocomplete eingefügt werden, welche als Parameter auf die Tabelle (movie) bzw. dessen entsprechendes Feld (name) verweist.

class MovieController < ApplicationController
  auto_complete_for :movie, :name
end

Nun ist die Anwendung schon fast fertig - was noch fehlt ist die View. Dafür wird nun eine index.rhtml in Verzeichnis app/views/movie/ erstellt.

<html>
 <head>
  <title>Autocomplete mit Ruby on Rails</title>
  <%= javascript_include_tag :defaults %>
 </head>
 <body>
  <h4>Autocomplete mit Ruby on Rails</h4>
  Movie: <%= text_field_with_auto_complete :movie, :name %>
 </body>
</html>

Kurz zur Erläuterung:

  • Die Methode javascript_include_tag bindet die Javascript-Libaries der Ajax-Frameworks script.aculo.us und Prototype ein, nämlich prototype.js, effects.js, dragdrop.js, controls.js und application.js.
  • Die Methode text_field_with_auto_complete - der als Parameter wieder movie und name übergeben werden - erstellt das Textfeld für das Autocomplete und den Javascript-Code zum Aufruf der entsprechenden Klassen des script.aculo.us-Frameworks.

So... fertig! Jetzt kann man die Anwendung aufrufen und sich an einem einfachen Autocomplete erfreuen. ;-)

Die fertige "Anwendung" kann hier betrachtet werden - oder unter meiner Rails-Subdomain rails.altes-kind.de.

Viel Spaß! :-)

Kein Kommentar