Reputation: 14727
I am doing a Spring web application and I am using Spring MVC.
I have a form with many fields, including the following one:
<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>
The above HTML elements are generated by:
<form:select path="birthYear" id="birthYear">
<option value=""></option>
<form:options items="${birthYears}" />
</form:select>
birthYears is a java list of year numbers.
When I submit the form and do redirect in the backend code, I direct the page to the following link for a successful submission:
http://localhost:8080/app/account/s/quickview/16
However, the web app, mysteriously, generates the following url showing up in a browser's address bar:
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
Does anybody know why?
Thanks for any input!
Regards.
----Update 1----- The form uses POST. I double checked it. Also I looked at the generated (from JSP) HTML page source, there is NO phrase like "birthYears".
--- Update 2------ This is strange. That problem happens when I use the following to populate the HTML select element.
map.put("birthYears", populateYears());
The problem is gone if do it as below (HttpServletRequest request, Map map)
request.setAttribute("birthYears", populateYears());
Anybody knows why?
Thanks!
Upvotes: 3
Views: 875
Reputation: 242716
By default Spring MVC appends all model attributes to a URL when you perform redirect. This behavior is counterintuitive and usually not desired, but it exists for historical reasons.
In order to disable it you need to add a parameter of type RedirectAttributes
to signatures of your controller methods that may perform redirect. Adding this parameter disables default behavior and give you explicit control over attributes to be added to redirect URL.
Upvotes: 5