3

我正在做一个 Spring Web 应用程序,我正在使用 Spring MVC。

我有一个包含许多字段的表单,包括以下字段:

<select name="birthYear" id="birthYear">
                    <option value=""></option>
                    <option value="2002">2002</option><option value="2001">2001</option><option value="2000">2000</option><option value="1999">1999</option><option value="1998">1998</option><option value="1997">1997</option><option value="1996">1996</option><option value="1995">1995</option><option value="1994">1994</option><option value="1993">1993</option><option value="1992">1992</option><option value="1991">1991</option><option value="1990">1990</option><option value="1989">1989</option><option value="1988">1988</option><option value="1987">1987</option><option value="1986">1986</option><option value="1985">1985</option><option value="1984">1984</option><option value="1983">1983</option><option value="1982">1982</option><option value="1981">1981</option><option value="1980">1980</option><option value="1979">1979</option><option value="1978">1978</option><option value="1977">1977</option><option value="1976">1976</option><option value="1975">1975</option><option value="1974">1974</option><option value="1973">1973</option><option value="1972">1972</option><option value="1971">1971</option><option value="1970">1970</option><option value="1969">1969</option><option value="1968">1968</option><option value="1967">1967</option><option value="1966">1966</option><option value="1965">1965</option><option value="1964">1964</option><option selected="selected" value="1963">1963</option><option value="1962">1962</option><option value="1961">1961</option><option value="1960">1960</option><option value="1959">1959</option><option value="1958">1958</option><option value="1957">1957</option><option value="1956">1956</option><option value="1955">1955</option><option value="1954">1954</option><option value="1953">1953</option><option value="1952">1952</option><option value="1951">1951</option><option value="1950">1950</option><option value="1949">1949</option><option value="1948">1948</option><option value="1947">1947</option><option value="1946">1946</option><option value="1945">1945</option><option value="1944">1944</option><option value="1943">1943</option><option value="1942">1942</option><option value="1941">1941</option><option value="1940">1940</option><option value="1939">1939</option><option value="1938">1938</option><option value="1937">1937</option><option value="1936">1936</option><option value="1935">1935</option><option value="1934">1934</option><option value="1933">1933</option><option value="1932">1932</option><option value="1931">1931</option><option value="1930">1930</option><option value="1929">1929</option><option value="1928">1928</option><option value="1927">1927</option><option value="1926">1926</option><option value="1925">1925</option><option value="1924">1924</option><option value="1923">1923</option><option value="1922">1922</option><option value="1921">1921</option><option value="1920">1920</option><option value="1919">1919</option><option value="1918">1918</option><option value="1917">1917</option><option value="1916">1916</option><option value="1915">1915</option><option value="1914">1914</option><option value="1913">1913</option><option value="1912">1912</option><option value="1911">1911</option><option value="1910">1910</option><option value="1909">1909</option><option value="1908">1908</option><option value="1907">1907</option><option value="1906">1906</option><option value="1905">1905</option><option value="1904">1904</option><option value="1903">1903</option><option value="1902">1902</option><option value="1901">1901</option><option value="1900">1900</option>
</select>

上面的 HTML 元素是通过以下方式生成的:

<form:select path="birthYear"  id="birthYear">
    <option value=""></option>
    <form:options items="${birthYears}" />
</form:select>  

birthYears 是一个 Java 年份数字列表。

当我提交表单并在后端代码中进行重定向时,我将页面定向到以下链接以成功提交:

http://localhost:8080/app/account/s/quickview/16

然而,这个网络应用程序神秘地生成了以下 url,显示在浏览器的地址栏中:

http://localhost:8080/app/account/s/quickview/16?birthYears=2002&birthYears=2001&birthYears=2000&birthYears=1999&birthYears=1998&birthYears=1997&birthYears=1996&birthYears=1995&birthYears=1994&birthYears=1993&birthYears=1992&birthYears=1991&birthYears=1990&birthYears=1989&birthYears=1988&birthYears=1987&birthYears=1986&birthYears=1985&birthYears=1984&birthYears=1983&birthYears=1982&birthYears=1981&birthYears=1980&birthYears=1979&birthYears=1978&birthYears=1977&birthYears=1976&birthYears=1975&birthYears=1974&birthYears=1973&birthYears=1972&birthYears=1971&birthYears=1970&birthYears=1969&birthYears=1968&birthYears=1967&birthYears=1966&birthYears=1965&birthYears=1964&birthYears=1963&birthYears=1962&birthYears=1961&birthYears=1960&birthYears=1959&birthYears=1958&birthYears=1957&birthYears=1956&birthYears=1955&birthYears=1954&birthYears=1953&birthYears=1952&birthYears=1951&birthYears=1950&birthYears=1949&birthYears=1948&birthYears=1947&birthYears=1946&birthYears=1945&birthYears=1944&birthYears=1943&birthYears=1942&birthYears=1941&birthYears=1940&birthYears=1939&birthYears=1938&birthYears=1937&birthYears=1936&birthYears=1935&birthYears=1934&birthYears=1933&birthYears=1932&birthYears=1931&birthYears=1930&birthYears=1929&birthYears=1928&birthYears=1927&birthYears=1926&birthYears=1925&birthYears=1924&birthYears=1923&birthYears=1922&birthYears=1921&birthYears=1920&birthYears=1919&birthYears=1918&birthYears=1917&birthYears=1916&birthYears=1915&birthYears=1914&birthYears=1913&birthYears=1912&birthYears=1911&birthYears=1910&birthYears=1909&birthYears=1908&birthYears=1907&birthYears=1906&birthYears=1905&birthYears=1904&birthYears=1903&birthYears=1902&birthYears=1901&birthYears=1900&birthYears=1899&birthYears=1898&birthYears=1897&birthYears=1896&birthYears=1895&birthYears=1894&birthYears=1893&birthYears=1892&birthYears=1891&birthYears=1890&birthYears=1889&birthYears=1888&birthYears=1887&birthYears=1886&birthYears=1885&birthYears=1884&birthYears=1883&birthYears=1882&birthYears=1881&birthYears=1880&birthYears=1879&birthYears=1878&birthYears=1877&birthYears=1876&birthYears=1875&birthYears=1874&birthYears=1873&birthYears=1872&birthYears=1871&birthYears=1870&birthYears=1869&birthYears=1868&birthYears=1867&birthYears=1866&birthYears=1865&birthYears=1864&birthYears=1863&months=1&months=2&months=3&months=4&months=5&months=6&months=7&months=8&months=9&months=10&months=11&months=12

有人知道为什么吗?

感谢您的任何意见!

问候。

----更新 1----- 表单使用 POST。我仔细检查了它。我还查看了生成的(来自 JSP)HTML 页面源,没有像“birthYears”这样的短语。

--- 更新 2----- 这很奇怪。当我使用以下内容填充 HTML 选择元素时,就会出现该问题。

map.put("birthYears", populateYears());

如果按照以下方式进行操作,问题就消失了(HttpServletRequest 请求,地图地图)

request.setAttribute("birthYears", populateYears());

有人知道为什么吗?

谢谢!

4

1 回答 1

5

默认情况下,当您执行重定向时,Spring MVC 会将所有模型属性附加到 URL。这种行为是违反直觉的,通常是不希望的,但它的存在是出于历史原因。

为了禁用它,您需要将类型参数添加RedirectAttributes到可能执行重定向的控制器方法的签名中。添加此参数会禁用默认行为,并让您明确控制要添加到重定向 URL 的属性。

于 2013-06-21T17:44:09.533 回答