Dank der Mixins von Tapestry kann man einen ActionLink und auch andere Components, die Mixins vertragen mit einem Bestätigungspopup versehen.
Eine genaue Erklärung dazu gibt es hier.
Danke an den Autor, hat mir viel Zeit gespart!
Dank der Mixins von Tapestry kann man einen ActionLink und auch andere Components, die Mixins vertragen mit einem Bestätigungspopup versehen.
Eine genaue Erklärung dazu gibt es hier.
Danke an den Autor, hat mir viel Zeit gespart!
Für ein aktuelles Projekt habe ich sowohl eine Mobile Seite und eine normale Website. Natürlich soll der Benutzer, wenn er mit einem iPhone ankommt, auch direkt auf die Mobile Seite weitergeleitet werden.
Dies lässt sich relativ einfach mit Javascript machen:
if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)))
{
location.replace("WOHIN SOLLS GEHEN?");
}
Um das jetzt in eine Tapestry Seite einzubauen reicht folgender Code:
<script language="javascript">
if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)))
{
location.replace("mobile/iphone/index");
}
</script>
Dieser sollte in der Index Datei eingebaut werden, damit der User direkt vom Index auf die neue Seite weitergeleitet wird. Natürlich könnte man es auch ins Layout einbinden, dann würde der User von jeder Seite auf die mobile weitergeleitet.
Nachteil: Der Benutzer kann sich nicht dafür entscheiden, einfach eine Unterseite aufzurufen und dort die normale Version zu verwenden.
Heute wurde (endlich) auch ein VolumeBoost für OS 3.0 released.
Über Cydia installiert erhöht es nach einem Neustart die Gesamtlautstärke, womit man dann endlich auch wieder hört, wenn es klingelt.
Natürlich will man nicht immer die ID zu einem Item raussuchen müssen, um dieses zu laden. Deswegen bietet die API auch eine Suchfunktion (GetSearchResultsCall).
Diesem wird, wie der zuletzt verwendete GetItemCall auch, im Konstruktor der API Kontext übergeben.
Danach kann man über verschiedene setter Suchkriterien hinzufügen.
Hier einmal eine einfache Suche, nach allen Items mit dem übergebenen String:
/**
* Führt die gegebene Suche durch und gibt die Ergebnisse in einem Array zurück
*/
public SearchResultItemType[] search(String search) throws Exception {
GetSearchResultsCall api = new GetSearchResultsCall(this.apiContext);
api.setQuery(search);
return api.getSearchResults();
}
Man könnte das ganze dann noch auf eine bestimmte Kategorien begrenzen:
/**
* Führt die gegebene Suche in der Kategorie durch und gibt die Ergebnisse in einem Array zurück
*/
public SearchResultItemType[] search(String search, String katID) throws Exception {
GetSearchResultsCall api = new GetSearchResultsCall(this.apiContext);
api.setQuery(search);
api.setCategoryID(katID);
return api.getSearchResults();
}
Um nur Sofortkauf oder Auktionen zu erhalten, könnte man folgendes setzen:
api.setItemTypeFilter(ItemTypeFilterCodeType.AUCTION_ITEMS_ONLY);bzw.
api.setItemTypeFilter(ItemTypeFilterCodeType.ALL_FIXED_PRICE_ITEM_TYPES);
Andere Typen sind in ItemTypeFilterCodeType festgelegt.
Weitere Einschränkungen sind in der Datei DialogGetSearchResults.java vom Example-Projekt ApiCallsDemo zu finden (u.a. Mindestpreis, Maximalpreis, Entfernung zum Artikelstandort …)
Im Ordner /samples liegen verschiedene Java Projekte, die man zu Anschaungszwecken mal öffnen und durchgehen sollte.
Besonders die ApiCallsDemo hat viele interessante Inhalte.
Nachdem man dies aber nun hinter sich hat, erstellen wir unser erstes Netbeans Projekt.
Ich habe mich für eine normale Java Application entschieden.
Sobald das Projekt dann erstellt ist, klicken wir mit der rechten Maustaste im Projects Fenster auf die Libraries und dann auf Add Library. Hier fügen wir dann die vorher eingerichtete ebay Lib ein.
Die Verbindung mit Ebay zwar über das SDK geregelt, Authentifizierung etc muss man aber noch selbst übernehmen.
Um alle benötigten Funktionen zu kapseln, legen wir eine Klasse ebayConnector an. In den Konstruktor kommt dann folgender Code:
public ebayConnector() throws Exception {
this.props = new Properties();
props.load(getClass().getResourceAsStream("ebayConnector.properties"));
String host = props.getProperty("host");
String auth = props.getProperty("auth");
this.apiContext = new ApiContext();
ApiCredential cred = apiContext.getApiCredential();
cred.seteBayToken(auth);
apiContext.setApiServerUrl(host);
apiContext.setSite(SiteCodeType.GERMANY);
Zusätzlich brauchen wir noch die Datei ebayConnector.properties im selben Package. Deren Inhalt ist einmal der host und einmal der auf der ebay Seite erstellte Auth-Token:
host = https://api.sandbox.ebay.com/wsapi
auth = TOKEN
Die Klasse ebayConnector ließt nun im Konstruktor aus dem Properties-File die benötigten Infos und bau daraus den apiContext, der für alle zukünftigen Calls verwendet wird.
Als erstes kleines Beispiel möchte ich jetzt mal zeigen, wie man ein Item mit gegebener ID läd.
Hierfür erstellen wir uns die Methode public ItemType getItem(String id). Ebay speichert quasi alle IDs als Strings, auch wenn es im Normalfall Zahlen sind.
Der Code der Methode sieht dann so aus:
/**
* Läd ein Item mit der gegebenen ID
* @param itemID
* @return
* @throws Exception
*/
public ItemType getItem(String itemID) throws Exception {
GetItemCall gc = new GetItemCall(apiContext);
DetailLevelCodeType[] detailLevels = new DetailLevelCodeType[]{
DetailLevelCodeType.RETURN_ALL,
DetailLevelCodeType.ITEM_RETURN_ATTRIBUTES,
DetailLevelCodeType.ITEM_RETURN_DESCRIPTION
};
gc.setDetailLevel(detailLevels);
return (gc.getItem(itemID));
}
Den Aufruf können wir dann in unsere main Methode packen:
public static void main(String[] args){
ebayConnector ec = new ebayConnector();
Itemtype it = ec.getItem("999999999999");
System.out.println(it.getTitle());
}
Glückwunsch, dass war der erste API Call. Mit dem Item könnte man jetzt rumspielen, wie man die interessantesten Infos ausließt findet man in der Datei ApplicationViewItem.java vom Sample-Projekt consoleViewItem.