Changes for page Development-Tips and Tricks
Last modified by Johann Werner on 2011/11/30 09:44
From version 11.1
edited by Johann Werner
on 2011/11/30 09:44
on 2011/11/30 09:44
Change comment:
Migrated to Confluence 5.3
To version 5.1
edited by smmccraw
on 2007/07/08 09:46
on 2007/07/08 09:46
Change comment:
There is no comment for this version
Summary
-
Page properties (5 modified, 0 added, 0 removed)
Details
- Page properties
-
- Title
-
... ... @@ -1,1 +1,1 @@ 1 -Development-Tips and Tricks 1 +Programming__WebObjects-Web Applications-Development-Tips and Tricks - Parent
-
... ... @@ -1,1 +1,0 @@ 1 -How-tos - Author
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. jw1 +XWiki.smmccraw - Tags
-
... ... @@ -1,1 +1,0 @@ 1 -wikireview - Content
-
... ... @@ -1,76 +1,81 @@ 1 -== URL's == 1 +== URL's == 2 2 3 3 * wocontext.request().uri() = the URL currently being requested 4 4 5 5 There are several different URL's associated with your application, all of which can be retrieved from various methods on WOApplication. Here is a quick cheat sheet of them: 6 6 7 -* WOApplication.application().applicationBaseURL() = /WebObjects 8 8 * WOApplication.application().baseURL() = /WebObjects 9 -* WOApplication.application().cgiAdaptorURL() = [[http:~~/~~/hostname/cgi-bin/WebObjects>>url:http://hostname/cgi-bin/WebObjects||shape="rect"]] 10 -* WOApplication.application().directConnectURL() = [[http:~~/~~/hostname:port/cgi-bin/WebObjects/MyApplication.woa>>url:http://hostname:port/cgi-bin/WebObjects/MyApplication.woa||shape="rect"]] 8 +* WOApplication.application().applicationBaseURL() = /WebObjects 9 +* WOApplication.application().cgiAdaptorURL() = http:~/~/hostname/cgi-bin/WebObjects 10 +* WOApplication.application().directConnectURL() = http:~/~/hostname:port/cgi-bin/WebObjects/MyApplication.woa 11 11 * WOApplication.application().frameworksBaseURL() = /WebObjects/Frameworks 12 -* WOApplication.application().host() = hostname 13 -* WOApplication.application().servletConnectURL() = [[http:~~/~~/hostname/cgi-bin/WebObjects/MyApplication.woa>>url:http://hostname/cgi-bin/WebObjects/MyApplication.woa||shape="rect"]] 14 -* WOApplication.application().webserverConnectURL() = [[http:~~/~~/hostname/cgi-bin/WebObjects/MyApplication.woa/-port>>url:http://hostname/cgi-bin/WebObjects/MyApplication.woa/-port||shape="rect"]] 12 +* WOApplication.application().servletConnectURL() = http:~/~/hostname/cgi-bin/WebObjects/MyApplication.woa 13 +* WOApplication.application().webserverConnectURL() = http:~/~/hostname/cgi-bin/WebObjects/MyApplication.woa/-port 15 15 16 -== Browser IP == 15 +== Browser IP == 17 17 18 -{{ code}}17 +{{panel}} 19 19 20 -/** Returns the IP address of the client. 21 - * This should return accurate information whether in direct connect or webserver deployment mode. 22 - * If performance caching is turned on on OS X server, this method will correctly use pc-remote-addr 23 - * @return The IP address as a string. 24 - */ 25 - public static String clientIP(WORequest request) { 26 - Object ipAddress = request.headerForKey("pc-remote-addr"); 27 - if (ipAddress == null) { 28 - ipAddress = request.headerForKey("remote_addr"); 29 - if( ipAddress == null ) { 30 - ipAddress = request.headerForKey("remote_host"); 31 - if( ipAddress == null ) { 32 - ipAddress = request._remoteAddress(); 33 - if( ipAddress == null ) { 34 - ipAddress = request._originatingAddress(); 35 - if( ipAddress != null ) ipAddress = ((InetAddress)ipAddress).getHostAddress(); 36 - } 37 - } 38 - } 39 - } 40 - return ipAddress == null ? "<address unknown>" : ipAddress.toString(); 41 - } 19 + /** Returns the IP address of the client. 20 + * This should return accurate information whether in direct connect or webserver deployment mode. 21 + * If performance caching is turned on on OS X server, this method will correctly use pc-remote-addr 22 + * @return The IP address as a string. 23 + */ 24 + public static String clientIP(WORequest request) { 25 + Object ipAddress = request.headerForKey("pc-remote-addr"); 26 + if (ipAddress == null) { 27 + ipAddress = request.headerForKey("remote_addr"); 28 + if( ipAddress == null ) { 29 + ipAddress = request.headerForKey("remote_host"); 30 + if( ipAddress == null ) { 31 + ipAddress = request._remoteAddress(); 32 + if( ipAddress == null ) { 33 + ipAddress = request._originatingAddress(); 34 + if( ipAddress != null ) ipAddress = ((InetAddress)ipAddress).getHostAddress(); 35 + } 36 + } 37 + } 38 + } 39 + return ipAddress == null ? "<address unknown>" : ipAddress.toString(); 40 + } 42 42 43 -{{/ code}}42 +{{/panel}} 44 44 45 -== NSArray == 44 +== NSArray == 46 46 47 47 It's in the docs, but NSArray's implementation of KeyValueCoding is not really what I was expecting. To get an object at a specific numeric index of an NSArray, you'd use the 48 48 49 49 {{panel}} 50 -objectAtIndex() 49 + 50 + objectAtIndex() 51 + 51 51 {{/panel}} 52 52 53 53 method. So what does 54 54 55 55 {{panel}} 56 -NSArray.valueForKey(String key) 57 + 58 + NSArray.valueForKey(String key) 59 + 57 57 {{/panel}} 58 58 59 59 return? 60 60 61 -Well, first read the docs: [[file:~~/~~//OSX/Developer/Documentation/WebObjects/Reference/com/webobjects/foundation/NSArray.html#valueForKey(java.lang.String>>url:file:///OSX/Developer/Documentation/WebObjects/Reference/com/webobjects/foundation/NSArray.html#valueForKey(java.lang.String||shape="rect"]])64 +Well, first read the docs: file:~/~//OSX/Developer/Documentation/WebObjects/Reference/com/webobjects/foundation/NSArray.html#valueForKey(java.lang.String) 62 62 63 63 It turns out that calling valueForKey on an array is the same as calling valueForKey for each element of that array. So if you have an NSArray of Users, calling valueForKey("email"); will return an NSArray of email addresses. calling valueForKey("documents"); will return an NSArray of NSArrays containing document objects. In hindsight (and from looking at the way WOBuilder handles key paths for arrays) this is kind of obvious. But I think the real lesson here is that it is easy to ignore the docs towards the end of an alphabetical page... 64 64 65 -== HTML-friendly String Truncating == 68 +== HTML-friendly String Truncating == 66 66 67 -{{ code}}70 +{{panel}} 68 68 69 -import org.apache.commons.lang.*; //From Apache 70 - import org.clapper.util.text.*; // From http://www.clapper.org/ 72 + import org.apache.commons.lang.*; //From Apache 73 + import org.clapper.util.text.*; // From http://www.clapper.org/ 74 + 75 + public static String stripHTMLTagsAndConcatenate(String htmlString, int numberOfChar) { 76 + return (StringUtils.substringBeforeLast(StringUtils.abbreviate((HTMLUtil.stripHTMLTags(htmlString)), numberOfChar), " ")) + "..."; 77 + } 71 71 72 - public static String stripHTMLTagsAndConcatenate(String htmlString, int numberOfChar) { 73 - return (StringUtils.substringBeforeLast(StringUtils.abbreviate((HTMLUtil.stripHTMLTags(htmlString)), numberOfChar), " ")) + "..."; 74 - } 79 +{{/panel}} 75 75 76 - {{/code}}81 +Category:WebObjects