Aug 25th, 2008 by retschgi
Heute musste ich mein Wissens über Cookies in ASP.net wiedermal etwas auffrischen. Damit ich es nicht vergesse, schreibe ich es hier nun entgültig auf:
Einfaches Cookie anlegen:
Cookies legt man prinzipiel über das Response-Objekt an. Wichtig ist zu wissen, dass die Daten auf 4 KB beschränkt sind.
Response.Cookies["Testcookie"].Value = "Mein Wert";
Auslesen eines Cookies:
Das Auslesen geht denkbar einfach:
if (Request.Cookies["Testcookie"].Value != null)
{
string s = Request.Cookies["Testcookie"].Value;
}
Ablaufdatum eines Cookies:
Wird nichts angegeben so lebt ein Cookie solange bis der Browser geschlossen wird (unbeschränktes Cookie). Will man eine längere Lebensdauer sicherstellen, so kann man ein Ablaufdatum angeben.
if (Request.Cookies["Testcookie"].Value != null)
{
Response.Cookies["Testcookie"].Expires = DateTime.Now.AddMonths(2);
}
Manuelles Löschen eines Cookies:
Das löschen des Cookies funktioniert so, dass man dem Cookie ein Ablaufdatum gibt, welches in der Vergangeheit liegt.
if (Request.Cookies["Testcookie"].Value != null)
{
Response.Expires = new DateTime(0);
}
Verschachtelte Cookies:
Man kann Cookies erstellen, welche sich wie ein Array verhalten (Dictionary) .
Response.Cookies["bookstore"]["book1"] = "ASP.net 2.0";
Response.Cookies["bookstore"]["book2"] = "JSF 1.2";
Das Resultat sieht anschliessend folgendermassen aus: MehrereInhalte:book1=ASP.net 2.0&book2=JSF 1.2
Definieren eines HTTP-Cookie:
Der Unterschied von einem HTTP-Cookie zu einem normalen Cookie ist, dass das HTTP-Cookie erst beim Absenden der Response hinzugefügt wird. Ein „normales“ Cookie wird hinzugefügt sobald Response.Cookies['…'] aufgeführt wird.
HttpCookie Cookie = new HttpCookie("bookstore");
Cookie.Values.Add("book1", "ASP.net 2.0");
Cookie.Values.Add("book2", "JSF 1.2");
Response.AppendCookie(Cookie);
Tags: .net, C#, Programming
Posted in C#, Microsoft .net, Programming | No Comments »
Aug 14th, 2008 by retschgi
Eine Funktion, welche ich am meisten in Visual Studio vermisse ist das automatisch generieren von Getter/Setter properties. Klar es gibt die Möglichkeit private Felder automatisch zu entkapseln. Will man jedoch eine grössere Menge von Feldern auf einmal entkapseln, ist das leider nicht möglich.
Eine gute Abhilfe für dieses “Problem” schafft das Plugin “Property Manager”. Dieses AddIn verleiht Visual Studio die Möglichkeit Properties à la bekannte Java IDE’s (generate Getter/Setter-methods) zu erstellen.
Download unter: http://www.csharper.net/download.aspx?f=PropertyManagerSetup.exe
Blog mit Gebrauchsanleitung: http://www.csharper.net/blog/property_manager_addin_for_visual_studio_2005.aspx
Tags: .net, Programming, Programming Tools, Visual Studio
Posted in Microsoft .net, Programming, Tools | No Comments »
Jul 29th, 2008 by retschgi
Heute hatte ich wiedermal ein altbekanntes Problem mit SVN. Ich wollte in einem IntelliJ-Projekt einen Ordner umbenennen und wieder einchecken. Hier zur Veranschaulichung:
Der Ordner devisenundzinsen sollte in devisen_zinsen umbenannt werden.

Als ich meine Änderungen einchecken wollte, gab mir SVN immer wieder folgende Fehlermeldung zurück:
Commit Failed Directory trunk/clippings/devisenundzinsen is out of datesvn
Sicher haben die meisten SVN User haben diese Fehlermeldung bereits einmal zu Gesicht bekommen. Wie lässt sich das Problem nun aber lösen? Aus meiner Erfahrung geht es am einfachsten, wenn man das zu umbenennende Directory zuerst löscht, das löschen eincheckt, ein neues Directory erstellt und dieses wieder eincheckt.
Hier noch mal die Anleitung anhand des konkreten Beispiels:
- Rückgängig machen der lokalen Umbenennung (z.B. via SVN Revert), so dass wieder nur das Ausgangsdirectory vorhanden ist (devisenundzinsen)
- Backup der Sources, welche sich innerhalb des zu umbenennenden Directory (devisenundzinsen) befinden
- Löschen des zu umbenennenden Directory (devisenundzinsen)
- Einchecken des löschbefehls
- erstellen eines neuen Directory (devisen_zinsen)
- hinzufügen der sources aus dem Backup (punkt 1) in das Directories (devisen_zinsen)
- einchecken des neuen Directories (devisen_zinsen)
Wenn der Fehler nach wie vor auftaucht, kann es auch ein Problem in dem SVN-Client sein. In meinem Fall in IntelliJ (7.0.3). Oftmals lässt sich das Problem lösen, wenn man einen anderen SVN-Client verwendet. Z.B: smartSVN. Somit kann man in diesem separaten Tool die oben beschriebenen Änderungen vornehmen und anschliessend in der IDE (z.B. IntelliJ) wieder auschecken.
Tags: Programming, Tools
Posted in Programming, Software, Tools | No Comments »
Jul 8th, 2008 by retschgi
Dank WMI kommt man mit .net sehr einfach an die SystemInformationen. Will man z.B. alle logischen Drives seines PC’s auslesen, geht dies wie folgt:
using System;
using System.Management;
using System.Management.Instrumentation;
using System.IO;
namespace GetDrives
{
class MyClass
{
static void Main(string[] args)
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk");
foreach (ManagementObject drives in searcher.Get())
Console.WriteLine(drives["Name"].ToString());
}
}
}
Für all diejenigen, welche sich mit WMI auseinander setzten wollen: msdn
Das ist wirklich eine tolle Sache!
Tags: .net, C#, Programming
Posted in C#, Microsoft .net, Programming | No Comments »
Jul 7th, 2008 by retschgi
Safari erfreut sich immer grösserer beliebtheit und seit der Version für Windows XP und Windows Vista, wird der Apple Browser auch immer mehr von Windows-Andwendern eingesetzt. Als Webentwickler ist es daher immer wichtiger seine Seite auch für den Safari zu testen.
Ich war auf der Suche nach einem Firebug ähnlichen Tool um ein komfortables Debuggen zu ermöglichen. Safari kommt bereits mit einem solchen Tool daher. Es heisst Webkit. Jedoch muss Webkit zuerst noch aktiviert werden, bevor man dieses Tool verwenden kann. Dies geht denkbar einfach:
1. klicke im Menü auf: Bearbeiten>Einstellungen

2. Aktiviere unter dem Menü Erweitert, die Option: Menü “Developer” in der Menüleiste einbinden

Das wars. Viel Spass beim Debuggen
Tags: Programming, Tools
Posted in Programming, Software, Tools | No Comments »
Jul 4th, 2008 by retschgi
vom 21. juni 2008 bis am 01. juli 2008 verbrachte ich meine sommerferien auf mallorca. nein! ich hatte keine partyferien gemacht. stationiert war ich im osten von mallorca: in cala murada. ich lernte mallorca von einer sehr ruhigen seite kennen und kann es getrost weiter empfehlen. als wahre korfu-fan habe ich jedoch die vorzüge von griechenland vermisst. ehja sommer 2009 werde ich wohl wieder dort anzutreffen sein
es sind einige fotos entstanden, welche ihr hier bestaunen könnt:photos
Tags: Ferien, Mallorca
Posted in Holidays, Leben und Leben lassen, Uncategorized | No Comments »
Jun 17th, 2008 by retschgi
Heute kam ich in die Situation, wo ich JSF 1.2 zusammen mit JSTL verwenden wollte. Die Frage welche im Raum stand: Funktioniert dies überhaupt? Fröhliche Antwort: Ja es funktioniert.
Wie kann man nun JSF zusammen mit JSTL verwenden? Hier zwei Beispiele:
Verwendung von JSTL <c:set> mit JSF
Dieses Tag:
1
| <c:set var="variable" value="wert" /> |
kann in JSF auch verwendet werden. Der Zugriff erfolgt lediglich ein wenig speziell.
1
2
3
4
5
| // Definieren
<c:set var="myVariable" value="3" scope="request">
// Auslesen
<h:outputText value="#{requestScope.myVariable} /> |
Hinweis: Die Variablen könne natürlich auch auf der Session usw. gespeichert werden. Der Zugriff würde dafür via sessionScope.myVariable geschehen
Verwendung von JSTL <c:forEach>
1
2
3
| <c:forEach value="#{myManagedBean.myList}" var="entry">
<h:outputText value="#{entry.property}" />
</c:forEach> |
Tags: JEE, JSF, Programming
Posted in Programming | No Comments »
Feb 21st, 2008 by retschgi
Wer mit JSP programmiert hat sicherlich bereits gemerkt, dass JSP je nach Tag viele Blanklines in dem output HTML-File generiert. Owohl das in den meisten Fällen nicht performancekritisch ist, ist es doch störend für das Auge. In Zeiten von Suchmaschinenoptimierung und notwendigkeiten von validem HTML kann es trotzdem interessant sein diese Leerschläge zu ersetzten. Hier ein Ansatz wie man das mit Tomcat (Ab Version 5.0) relativ einfach realisieren kann.
1. Zu Beginn unserer JSP-Seite fügen wir folgende Direktive ein:
1
| <%@page trimDirectiveWhitespaces="true"%> |
Dies bewirkt, dass alle unnötigen Leerschläge vor dem <html> enfternt werden.
2. Eine konfiguration des Tomcats schafft zudem Abhilfe, dass die Leerschläge innerhalb des <html>-Tag’s entfernt werden.
Dazu öffnen wir das File: %catalina_home%\ conf\web.xml
In diesem File gibt es folgenden Eintrag:
1
2
3
4
5
6
7
8
9
10
11
12
13
| <servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet> |
Diesem Servlet fügen wir nun folgenden Request-Parameter hinzu:
1
2
3
4
| <init-param>
<param-name>trimSpaces</param-name>
<param-value>true</param-value>
</init-param> |
Nun wird sogenanntes pretty-HTML ausgegeben.
Tags: JEE, JSP, Programming, Tomcat
Posted in J2EE, JSP, Programming, Tomcat | 1 Comment »
Dec 3rd, 2007 by retschgi
Heute hatte ich das Problem, dass der Wert von einem boolean innerhalb einer Hibernate-Entity nicht in die Datenbank persistiert wurde. Zur Veranschaulichung hier etwas code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| @entity
public class TestClass
{
@Id
@GeneratedValue
private int id;
private boolean myBoolean
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public boolean isMyBoolean()
{
return configurable;
}
public void setMyBoolean(boolean myBoolean)
{
this.myBoolean = myBoolean;
}
} |
Das Problem besteht darin, dass MySQL seit der Version 5.0 den SQL-Datentyp Bit verwendet um einen boolschen Wert zu repräsentieren. Offenbar kann Hibernate dies aber nicht richtig handeln. In der Kürze liegt die Würze und daher gibt es auch eine kurze Lösung für dieses Problem:
Folgendes als Field-Definition in der Entity-Bean verwenden:
1
2
| @Column(columnDefinition="TINYINT(1)")
private boolean myBoolean; |
Tags: EJB 3.0, hibernate, Java, JEE, Programming
Posted in EJB 3.0, J2EE, Programming, hibernate | No Comments »