diff --git a/templatefunc.go b/templatefunc.go index 1224e82f..28ed15a3 100644 --- a/templatefunc.go +++ b/templatefunc.go @@ -358,11 +358,32 @@ func ParseForm(form url.Values, obj interface{}) error { } fieldV.Set(reflect.ValueOf(t)) } + case reflect.Slice: + if fieldT.Type == sliceOfInts { + formVals := form[tag] + fieldV.Set(reflect.MakeSlice(reflect.SliceOf(reflect.TypeOf(int(1))), len(formVals), len(formVals))) + for i := 0; i < len(formVals); i++ { + val, err := strconv.Atoi(formVals[i]) + if err != nil { + return err + } + fieldV.Index(i).SetInt(int64(val)) + } + } else if fieldT.Type == sliceOfStrings { + formVals := form[tag] + fieldV.Set(reflect.MakeSlice(reflect.SliceOf(reflect.TypeOf("")), len(formVals), len(formVals))) + for i := 0; i < len(formVals); i++ { + fieldV.Index(i).SetString(formVals[i]) + } + } } } return nil } +var sliceOfInts = reflect.TypeOf([]int(nil)) +var sliceOfStrings = reflect.TypeOf([]string(nil)) + var unKind = map[reflect.Kind]bool{ reflect.Uintptr: true, reflect.Complex64: true,