NSStringFromClass([self class]), self];
}
-@end /* WOElement */
-
-@implementation WOElement(QueryString)
+/* QueryString */
- (NSString *)queryStringForQueryDictionary:(NSDictionary *)_queryDict
andQueryParameters:(NSDictionary *)_paras
isFirst = YES;
paraKeys = [_paras allKeys];
-
+
/* ?style parameters */
keys = [_paras keyEnumerator];
- while ((key = [keys nextObject])) {
+ while ((key = [keys nextObject]) != nil) {
value = [[_paras objectForKey:key] stringValueInComponent:sComponent];
value = value ? [value stringByEscapingURL] : @"";
key = key ? [key stringByEscapingURL] : @"";
}
keys = [_queryDict keyEnumerator];
- while ((key = [keys nextObject])) {
- if(![paraKeys containsObject:key]) {
- value = [[_queryDict objectForKey:key] stringValue];
+ while ((key = [keys nextObject]) != nil) {
+ if([paraKeys containsObject:key])
+ /* overridden by a query parameter (?abc=abc) */
+ continue;
+
+ value = [_queryDict objectForKey:key];
+ if ([value isKindOfClass:[NSArray class]]) {
+ /* if we bind the queryDictionary to request.formValues */
+ NSArray *values;
+ unsigned i, count;
+
+ values = (NSArray *)value;
+ for (i = 0, count = [values count]; i < count; i++) {
+ value = [values objectAtIndex:i];
+ value = [value stringValue];
+ value = value ? [value stringByEscapingURL] : @"";
+ key = key ? [key stringByEscapingURL] : @"";
+
+ if (isFirst) isFirst = NO;
+ else [str appendString:@"&"];
+
+ [str appendString:key];
+ [str appendString:@"="];
+ [str appendString:value];
+ }
+ }
+ else {
+ value = [value stringValue];
value = value ? [value stringByEscapingURL] : @"";
key = key ? [key stringByEscapingURL] : @"";
if (isFirst) isFirst = NO;
else [str appendString:@"&"];
-
+
[str appendString:key];
[str appendString:@"="];
[str appendString:value];
return [str length] > 0 ? str : nil;
}
-@end /* WOElement(QueryString) */
+@end /* WOElement */
NGObjWeb_DECLARE id OWGetProperty(NSDictionary *_set, NSString *_name) {
register id propValue;