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
Change comment: Migrated to Confluence 5.3
To version 6.1
edited by smmccraw
on 2007/07/08 09:46
Change comment: There is no comment for this version

Summary

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.jw
1 +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