back to top

Web – View Resolver e Spring Form TLD – Guida Java Spring

Spring dispone di molti View Resolver, che hanno lo scopo di renderizzare il model in browser. Noi analizzeremo solo l'InternalResourceViewResolver che è che suppota Servlet e jsp.

Come visto in precendenza ogni controller restituisce il nome logico di una view che viene risolta attraverso il view resolver, nel nostro caso la view finale è una jsp. Per configurare l'InternalResourceViewResolver bastano le seguenti righe nel [dispatcherservlet]-servlet.xml:

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/WEB-INF/jsp/"/>
  <property name="suffix" value=".jsp"/>
</bean>

Attraverso questa configurazione, quando dal controller restituiamo una stringa del tipo /path/result il nostro View Resolver farà un forward alla jsp /WEB-INF/jsp/path/result.jsp. Se invce si ha bisogno di fare una redirect, basta anteporre alla stringa di ritorno del controller "redirect:".

Una volta configurato in nostro View Resolver, non ci resta che renderizzare i dati che sono stati messi dal controller nel Model. Usando le jsp si possono usare le JSTL per renderizzare i dati. Per la costruzione di form, Spring contiene la spring-form.tld, vediamo i tag contenuti:

  • form – tag principale, tutti i tag della library devono essere contenuti in questo tag per funzionare correttamente. Questo tag si occupa anche di aggiugere gli oggetti del model nel PageContext della jsp in modo che i tag figli vi possano accedere.
  • input – tag che renderizza un input con type 'text'.
  • checkbox – tag che renderizza una checkbox. Questo tag si riferisce all'attibuto di un bean che può essere una collection, un boolean o un object.
  • checkboxes – tag che renderizza una serie di checkbox. Questo tag si riferisce all'attibuto di un bean che è una lista di possibili valori.
  • radiobutton – tag che renderizza un radiobutton.
  • radiobuttons – tag che renderizza una serie di radiobuttons che si riferiscono ad un solo attributo di un bean.
  • password – tag che renderizza un input con type 'password'.
  • select – tag che renderizza una select.
  • option – tag che renderizza una option.
  • options – tag che renderizza una lista di option.
  • textarea – tag che renderizza una textarea.
  • hidden – tag che renderizza un input con type 'hidden'.
  • errors – tag che renderizza uno span contenente gli errori di validazione del form.

Vediamo un esempio completo di tutti i tag:

@Controller
public class FormController {

  @RequestMapping("formExample")
  public String viewForm(Model model) {
    // aggiungo in mio bean al model
    FormBean formBean = new FormBean();
    formBean.setHidden("hiddenValue");

    model.addAttribute("formBean", formBean);

    Collection<String> checkBoxes = new ArrayList<String>();
    checkBoxes.add("1");
    checkBoxes.add("2");
    checkBoxes.add("3");
    model.addAttribute("checkBoxes", checkBoxes);

    Collection<String> radiobuttons = new ArrayList<String>();
    radiobuttons.add("1");
    radiobuttons.add("2");
    radiobuttons.add("3");
    model.addAttribute("radiobuttons", checkBoxes);

    Collection<OptionForm> options = new ArrayList<OptionForm>();

    OptionForm option1 = new OptionForm();
    option1.setLabel("option1");
    option1.setValue("1");
    options.add(option1);

    OptionForm option2 = new OptionForm();
    option2.setLabel("option2");
    option2.setValue("2");
    options.add(option2);
    model.addAttribute("options", options);

    // definisco il view resolver
    return "form/example";
  }

  @RequestMapping(value="submit", method=RequestMethod.POST)
  public String viewForm(FormBean b) {
    // definisco il view resolver
    return "form/ok";
  }
}

il nostro form:

<form:form commandName="formBean" action="submit">
<p>
  <form:label path="input" >input</form:label>
  <form:input path="input"/>
</p>
<p>
  <form:label path="check1" >check1</form:label>
  <form:checkbox path="check1"/>
</p>
<p>
  <form:label path="check2">check2</form:label>
  <form:checkbox path="check2" value="value1" label="value1"/>
  <form:checkbox path="check2" value="value2" label="value2"/>
  <form:checkbox path="check2" value="value3" label="value3"/>
</p>
<p>
  <form:label path="check3" >check3</form:label>
  <form:checkbox path="check3" value="check3"/>
</p>
<p>
  <form:label path="checkboxes">checkboxes</form:label>
  <form:checkboxes path="checkboxes" items="${checkBoxes}"/>
</p>
<p>
  <form:label path="radiobutton">radiobutton</form:label>
  <form:radiobutton path="radiobutton" value="radiobutton1" label="radiobutton1"/>
  <form:radiobutton path="radiobutton" value="radiobutton2" label="radiobutton2"/>
</p>
<p>
  <form:label path="radiobuttons">radiobuttons</form:label>
  <form:radiobuttons path="radiobuttons" items="${radiobuttons}"/>
</p>
<p>
  <form:label path="password">password</form:label>
  <form:password path="password"/>
</p>
<p>
  <form:label path="select">select</form:label>
  <form:select path="select">
    <form:option value="-1" label="-- select"  />
    <form:options items="${options}" itemLabel="label" itemValue="value" />
  </form:select>
</p>
<p>
  <form:label path="textarea">textarea</form:label>
  <form:textarea path="textarea"/>
</p>
<p>
  <form:label path="hidden">hidden</form:label>
  <form:hidden path="hidden"/>
</p>

<input type="submit" value="submit" />
</form:form>
PubblicitÃ