Spring Framework JSP we JSTL bilen bilelikde Spring MVC ulanmak üçin integrasiýa hödürleýär.
Görüş tanamaçlar
JSP döretmekde adatça InternalResourceViewResolver
bean yglan edilýär.
InternalResourceViewResolver
islendik servlet çeşmesine, esasanam JSP-a ibermek üçin ulanylyp bilner. Has optimal usul hökmünde JSP faýllaryny "WEB-INF"
katalogynyň aşakdaky katalogynda ýerleşdirmäge berk maslahat berýäris, şonuň üçin müşderiler olara göni girip bilmeýärler.
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
JSPs garşy JSTL
JSTL ulanýan wagtynda JstlView
ýaly aýratyn bir klassy ulanmak zerur, sebäbi JSTL şeýle zatlaryň, mysal üçin I18N funksiýalarynyň işlemegi üçin taýýarlyk talap edýär.
Spring üçin JSP tegi kitaphanasy
Spring maglumat baglanyşygy bilen JSP sahypalaryny döretmegi aňladýar, öňki bölümlerde görkezilişi ýaly. Bu baglanyşyk funksiýalary bilen JSP sahypalary ýöretmegi ýeňilleşdirmek üçin, Spring işlemegi has-da aňsatlaşdyrýan birnäçe tegi hödürleýär. Bütün Spring tegleri HTML ekraniýalaşdyryjylaryny ulanmagy üpjün edýär, kimisek işläp hem işledip bolýar.
Tegler kitaphanasynyň deskriptory spring.tld
(TLD) spring-webmvc.jar
içine goşulýar. Aýratyn tegler barada doly maglumat almak üçin API dürli zat gözden geçiriň.
Spring üçin forma teglery kitaphanasy
2.0 wersiýasyndan başlap, Spring JSP we Spring Web MVC ulanýan wagtynda forma elementlerini işlemek üçin maglumat baglanyşyklaryny goldaýan doly teglery hödürleýär. Her tag HTML teginiň analog aýratynlyklaryny goldaýar, bu teglery adaty we intuisiýa taýdan düşnükli edýär. Tegler tarapyndan döredilen HTML taglary HTML 4.01/XHTML 1.0 standartlaryna laýyk gelýär.
Forma/beriş kitaphanalarynyň beýleki tegleryniň tersine, Spring üçin forma teglery Spring Web MVC bilen integrirlenen, bu tegleryň komanda obýektine we siziň kontrolýeriňiz bilen işleýän maglumatlara girmegi berýär. Aşakda görkezilişi ýaly, forma teglery JSP döretmegi, okamagy we goldamagy aňsatlaşdyrýar.
Biz forma teglery boýunça ýöräp, her tagnyň ulanylyş mysalyny gözden geçireris. Biz generirlenen HTML böleklerini goşduk, käbir tegleri goşmaça düşündirme talap eder.
Konfigurasiýa
Forma teglery kitaphanasy spring-webmvc.jar
bilen bilelikde hödürlenýär. Kitaphana deskriptory spring-form.tld
diýilýär.
Şu kitaphanadan tegleri ulanmak üçin JSP sahypaňyzyň ýokarky bölegine aşakdaky direktiwany goşuň:
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
bu ýerde form
- siziň bu kitaphanadan ulanmak isleýän tegler üçin adapte etmek isleýän tag adynyň prefiksi.
Forma tagy
Bu tag HTML elementi "form" bilen baglanyşykly baglanyşyga ýol açýar. Ol komanda obýektini PageContext
içine salýar, şonuň üçin bu komanda obýektine beýleki tegler tarapyndan girilip bilner. Bu kitaphanadaky beýleki ähli tegler form
tagnynyň içinde ýerleşen teglery.
Bizde User
atly obýekt bardygyny çak edeliň. Bu JavaBean firstName
we lastName
ýaly aýratynlyklara eýe. Ony biziň forma kontrolýerimiziň esasy obýekti hökmünde ulanyp bileris, form.jsp
faýlyny gaýtarýar. Aşakda form.jsp
faýlynyň näderejede bolup biljekdigini görkezýän mysal berilýär:
<form:form>
<table>
<tr>
<td>First Name:</td>
<td><form:input path="firstName"/></td>
</tr>
<tr>
<td>Last Name:</td>
<td><form:input path="lastName"/></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Save Changes"/>
</td>
</tr>
</table>
</form:form>
Görnüş firstName
we lastName
komand obýektinden alynýar, sahypa kontrolýeri tarapyndan PageContext
içine salynýar. form
tagy bilen içerki tegleriň has çylşyrymly ulanylyş mysallaryny görmegiňiz üçin okamagy dowam ediň.
Aşakdaky listede generirlenen HTML görkezilýär, adaty forma hökmünde görünýär:
<form method="POST">
<table>
<tr>
<td>First Name:</td>
<td><input name="firstName" type="text" value="Harry"/></td>
</tr>
<tr>
<td>Last Name:</td>
<td><input name="lastName" type="text" value="Potter"/></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Save Changes"/>
</td>
</tr>
</table>
</form>
Öňki JSP-da esasy forma obýektiniň ady command
bolandygy göz öňünde tutulýar. Forma esasy obýektini başga bir at boýunça modele goýanyňyzda bolsa (bu iň gowy tejribe), onda formany şu adlanan üýtgeýän bilen baglamak üçin aşakdaky mysal ulanyp bilersiňiz:
<form:form modelAttribute="user">
<table>
<tr>
<td>First Name:</td>
<td><form:input path="firstName"/></td>
</tr>
<tr>
<td>Last Name:</td>
<td><form:input path="lastName"/></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Save Changes"/>
</td>
</tr>
</table>
</form:form>
Tag input
Bu tag HTML elementi input
aralygynda type='text'
bilen baglanyşykly görünýär. Siz şeýle hem HTML5 aýratyn görnüşlerini, mysal üçin email
, tel
, date
we beýleki görnüşleri ulanyp bilersiňiz.
Tag checkbox
Bu tag HTML elementi input
görnüşinde type
goýulýar, checkbox
görnüşinde.
Çak edeliň, biziň User
özüne degişli şahsy sazlamalar, şeýle hem habarnamalar üçin abuna yazylmak we hobbi sanawy bar. Aşakdaky mysaly Preferences
synpy görkezilýär:
public class Preferences {
private boolean receiveNewsletter;
private String[] interests;
private String favouriteWord;
public boolean isReceiveNewsletter() {
return receiveNewsletter;
}
public void setReceiveNewsletter(boolean receiveNewsletter) {
this.receiveNewsletter = receiveNewsletter;
}
public String[] getInterests() {
return interests;
}
public void setInterests(String[] interests) {
this.interests = interests;
}
public String getFavouriteWord() {
return favouriteWord;
}
public void setFavouriteWord(String favouriteWord) {
this.favouriteWord = favouriteWord;
}
}
class Preferences(
var receiveNewsletter: Boolean,
var interests: StringArray,
var favouriteWord: String
)
Degişli form.jsp
faýly şuňa meňzeş bolmagyň mümkin:
<form:form>
<table>
<tr>
<td>Subscribe to newsletter?:</td>
<%-- Usul 1: Emläk Java.lang.Boolean görnüşinde --%>
<td><form:checkbox path="preferences.receiveNewsletter"/></td>
</tr>
<tr>
<td>Interests:</td>
<%-- Usul 2: Emläk array ýa-da Java.util.Collection görnüşinde --%>
<td>
Quidditch: <form:checkbox path="preferences.interests" value="Quidditch"/>
Herbology: <form:checkbox path="preferences.interests" value="Herbology"/>
Defence Against the Dark Arts: <form:checkbox path="preferences.interests" value="Defence Against the Dark Arts"/>
</td>
</tr>
<tr>
<td>Favourite Word:</td>
<%-- Usul 3: Emläk Java.lang.Object görnüşinde --%>
<td>
Magic: <form:checkbox path="preferences.favouriteWord" value="Magic"/>
</td>
</tr>
</table>
</form:form>
Checkbox tagy üçin üç usul bar, olaryň ählisi siziň ähli checkbox zerurlyklaryňyzy kanagatlandyrmak üçin ýeterlik bolmaly.
-
Usul 1: Eger baglanyşykly gymmat maglumatlary
java.lang.Boolean
görnüşinde bolsa,input(checkbox)
checked
hökmünde alamatlanýar, eger baglanyşykly gymmattrue
.value
atributysetValue(Object)
üçin mümkin bolan emläk gymmatlygyna laýyk gelýär. -
Usul 2: Eger baglanyşykly gymmat array ýa-da
java.util.Collection
görnüşindedir bolsa,input(checkbox)
checked
hökmünde alamatlanýar, eger konfigurirlenen gymmatsetValue(Object)
baglanyşyklyCollection
içinde bar bolsa. -
Usul 3: Baglanyşykly gymmatyň başga görnüşinde,
input(checkbox)
checked
hökmünde alamatlanýar, eger konfigurirlenensetValue(Object)
baglanyşykly gymmat bilen deň bolsa.
Diýmek, haýsy usuly ulansaňyzam, şol bir HTML gurluşy döredilýär. Aşakdaky HTML bölegindeiniň birnäçe checkbox bar:
<tr>
<td>Interests:</td>
<td>
Quidditch: <input name="preferences.interests" type="checkbox" value="Quidditch"/>
<input type="hidden" value="1" name="_preferences.interests"/>
Herbology: <input name="preferences.interests" type="checkbox" value="Herbology"/>
<input type="hidden" value="1" name="_preferences.interests"/>
Defence Against the Dark Arts: <input name="preferences.interests" type="checkbox" value="Defence Against the Dark Arts"/>
<input type="hidden" value="1" name="_preferences.interests"/>
</td>
</tr>
Belki, siz her checkbox-dan soň goşmaça gizlin meýdanýany görmekden garaşmarsyňyz. HTML sahypasynda checkbox bar bolsa, onuň gymmaty forma iberilenden soň HTTP sorag parametrlerine iberilmeýär, şonuň üçin bu HTML aýratynlygyny aýlamak üçin bir çäre zerur bolup biler. Spring forma maglumat baglanyşygyň işlemegi üçin, checkbox
tegi her checkbox üçin öňünde ýeke-ýeke gizlin parametr bar bolan _
bilen şeýle bir çemeleşmäge eýerip işledilýär. Şeýle etmek bilen, siz 'checkbox bu forma içinde görünýärdi we men forma maglumatlaryň baglanyşygyna, obýektimde checkbox ýagdaýyny aks etdirmegimi isleýärin' diýip Spring'ä aýdýarys.
Tag checkboxes
Bu tag birden köp HTML tagyny input
bilen bir hatarda type
bilen checkbox
görnüşinde görkezýär.
Bu bölüm öňki checkbox
tagy hakyndaky mysaldan esas alýar. Käwagt ähli mümkin bolan hobbilary JSP sahypasynda sanamak has gowy däl bolup biler. Munuň ýerine, elýeter opsiýalaryň sanawyny iş wagtynda görkezmek has amatly bolup biler, bu tagyň maksady şu. Siz items
emlägine Array
, List
ýa-da Map
geçirip bilersiňiz, elýeter opsiýalary özünde saklaýan. Adatça, baglanyşykly emläk bir ýygnama bolup, ulanyjy tarapyndan saýlanan birnäçe gymmatlary saklap biler. Aşakda JSP sahypasynda bu tagyň ulanylyşy görkezilýär:
<form:form>
<table>
<tr>
<td>Interests:</td>
<td>
<%-- Emläk array ýa-da Java.util.Collection görnüşinde --%>
<form:checkboxes path="preferences.interests" items="${interestList}"/>
</td>
</tr>
</table>
</form:form>
Bu mysalda interestList
bir model atributy hökmünde elýeterli, saýlanmak üçin gymmat setirlerini özünde saklaýan List
-iň bardygyny çak edýär. Eger siz Map
ulansaňyz, Map ýazgysy üçin penjeçe gymmat hökmünde, Map ýazgysy üçin penjeçe gymmat elýeterli bolýar. Şeýle hem, itemValue
we itemLabel
bilen gymmat we bellik häsiýetlerini görkezmek üçin özbaşdak obýekti ulanyp bilersiňiz.
Tag radiobutton
Bu tag HTML elementi input
bilen type
ýokaryda ýerleşdirilen radio
görnüşinde görkezýär.
Adaty ulanma plany birmeňzeş emläge bir hatarda birnäçe tag nusgalaryny ulanmagy göz öňünde tutýar, dünýädir gymmatlar, aşağıda görkezilen ýaly:
<tr>
<td>Sex:</td>
<td>
Male: <form:radiobutton path="sex" value="M"/> <br/>
Female: <form:radiobutton path="sex" value="F"/>
</td>
</tr>
Tag radiobuttons
Bu tag birden köp HTML elementlerini input
bilen bir hatarda type
bilen radio
görnüşinde görkezýär.
Şeýle hem, checkboxes
tagy bilen bir hatarda, siz elýeter opsiýalary üýtgeýän wagtyň dowamynda geçip bilersiňiz. Munuň üçin radiobuttons
tagy ulanyp bilersiňiz. Siz items
emlägine Array
, List
ýa-da Map
geçirip bilersiňiz, elýeter opsiýalary özünde saklaýan. Eger siz Map ulansaňyz, Map ýazgysy üçin penjeçe gymmat hökmünde, Map ýazgysy üçin penjeçe gymmat elýeterli bolýar. Şeýle hem, itemValue
we itemLabel
bilen gymmat we bellik häsiýetlerini görkezmek üçin özbaşdak obýekti ulanyp bilersiňiz, aşakda görkezilen ýaly:
<tr>
<td>Sex:</td>
<td><form:radiobuttons path="sex" items="${sexOptions}"/></td>
</tr>
Tag password
Bu tag HTML tagy input
bilen görnüşi, password
görnüşinde bolany bilen görkezýär.
<tr>
<td>Password:</td>
<td>
<form:password path="password"/>
</td>
</tr>
Şonuň üçin parol gymmaty adaty görkezilmeýär. Eger parol gymmaty görkezilmelidigi gerek bolsa, siz showPassword
atributynyň gymmatyny true
edip goýup bilersiňiz, aşakda görkezilen ýaly:
<tr>
<td>Password:</td>
<td>
<form:password path="password" value="^76525bvHGq" showPassword="true"/>
</td>
</tr>
Tag select
Bu tag HTML elementi "select" görnüşinde görkezýär. Ol saýlanan opsiýa üçin maglumat baglanyşygyny, şeýle hem içerki option
we options
taglaryny ulanmagy üpjün edýär.
Çak edeliň, User
bir ylym üçin sanaw bar. Degişli HTML şuňa meňzeş bolup biler:
<tr>
<td>Skills:</td>
<td><form:select path="skills" items="${skills}"/></td>
</tr>
Eger User
ylymlaryň sanawy, mysal üçin, hermologiýa, HTML "Skills" setiri şuňa meňzeş bolup biler:
<tr>
<td>Skills:</td>
<td>
<select name="skills" multiple="true">
<option value="Potions">Potions</option>
<option value="Herbology" selected="selected">Herbology</option>
<option value="Quidditch">Quidditch</option>
</select>
</td>
</tr>
Tag option
Bu tag HTML elementi option
görnüşinde görkezýär. Ol selected
atributyny baglanyşykly gymmata esaslanyp goýýar. Aşakdaky HTML görnüş ýokaryda görkezildi:
<tr>
<td>House:</td>
<td>
<form:select path="house">
<form:option value="Gryffindor"/>
<form:option value="Hufflepuff"/>
<form:option value="Ravenclaw"/>
<form:option value="Slytherin"/>
</form:select>
</td>
</tr>
Eger User
synpy Gryffindor diýen kategoriýada bolsa, HTML "House" setiri şuňa meňzeş bolup biler:
<tr>
<td>House:</td>
<td>
<select name="house">
<option value="Gryffindor" selected="selected">Gryffindor</option>
<option value="Hufflepuff">Hufflepuff</option>
<option value="Ravenclaw">Ravenclaw</option>
<option value="Slytherin">Slytherin</option>
</select>
</td>
</tr>
selected
atributy goşuluşyna üns beriň.
Tag options
Bu tag bir sanaway HTML elementlerini option
bilen görnüşinde görkezýär. Ol selected
atributyny baglanyşykly gymmata esaslanyp goýýar. Aşakdaky HTML görnüş ýokaryda görkezildi:
<tr>
<td>Country:</td>
<td>
<form:select path="country">
<form:option value="-" label="--Please Select"/>
<form:options items="${countryList}" itemValue="code" itemLabel="name"/>
</form:select>
</td>
</tr>
Eger User
Birleşen Patyşalykda ýaşar bolsa, HTML "Country" setiriniň çeşmesi şuňa meňzeş bolardy:
<tr>
<td>Country:</td>
<td>
<select name="country">
<option value="-">--Please Select</option>
<option value="AT">Austria</option>
<option value="UK" selected="selected">United Kingdom</option>
<option value="US">United States</option>
</select>
</td>
</tr>
- Görkezilen
selected
atributyna üns beriň. -
path="*"
: Hemme hatalary görkezýär. -
path="lastName"
:lastName
meýdanlaryna degişli ähli hatalary görkezýär. -
Eger
path
goýulmasa, diňe obýekt hatalary görkezilýär.
Öňki mysalda görkezilişi ýaly, option
tagyny options
tagy bilen bilelikde ulanmak şol bir adaty HTML döredýär, emma JSP-däki manysyny açyk görkezýär, näme üçin göýäki ýerinde bolmaly bolsady, mysal üçin "--Please Select" setiri.
Adatça, items
atributy bir element maglumat obýektleriniň ýygnamasy ýa-da masşystyr. Eger görkezilen bolsa, itemValue
we itemLabel
element maglumat obýektleriniň binar häsiýetlerine salgylanar. Şeýle bolmadyk ýagdaýynda, habar elementi obýektleri setirlerinde dolandyrylýar. Alternatiw, bir elementleriň masşystyny belläp biler, we bu maglumat obýektleriniň gymmatlary çygynyň gymmaty hökmünde öwretmek, we bellikleriň gymmaty hökmünde masşynlaryň gymmaty hökmünde seretmek. Şeýle hem itemValue
ýa-da itemLabel
(ýa-da ikisi birleşýän) hem bellense, element maglumat binasynyň gymmatly häsiýeti masşynyň açary bilen bagly bolar, we bellik häsiýeti masşynyň gymmatudygy bilen bagly bolar.
Tag textarea
Bu tag HTML elementi textarea
görnüşinde görkezýär. Aşakdaky HTML görnüş ýokaryda görkezildi:
<tr>
<td>Notes:</td>
<td><form:textarea path="notes" rows="3" cols="20"/></td>
<td><form:errors path="notes"/></td>
</tr>
Tag hidden
Bu tag HTML tagy input
görnüşinde, type
giňemesinde hidden
bilen baglanyşykly gymmat bilen görkezýär. Baglanmadyk gizlin gymmat ibermek üçin HTML tagyny input
bilen type
giňemesinde hidden
bilen ulanyň. Aşakdaky HTML görnüş ýokaryda görkezildi:
<form:hidden path="house"/>
Eger house
gymmaty gizlin ibermeli bolsa, onda HTML şuňa meňzeş bolup biler:
<input name="house" type="hidden" value="Gryffindor"/>
Tag errors
Bu tag HTML elementi span
içinde meýdan hatalaryny görkezýär. Ol kontrolýerinizde döredilen hatalara ýa-da kontrolýeriňiz bilen baglanyşykly bolan islendik walidatoryň döredilen hatalaryna giriş berýär.
Çak edeliň, firstName
we lastName
meýdanlary üçin ähli hata habarlary görkezmeli. User
sinplary üçin UserValidator
diýlip atlandyrylýan walidator bar, aşakda görkezilişi ýaly:
public class UserValidator implements Validator {
public boolean supports(Class candidate) {
return User.class.isAssignableFrom(candidate);
}
public void validate(Object obj, Errors errors) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "firstName", "required", "Field is required.");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "lastName", "required", "Field is required.");
}
}
class UserValidator : Validator {
override fun supports(candidate: Class<*>): Boolean {
return User::class.java.isAssignableFrom(candidate)
}
override fun validate(obj: Any, errors: Errors) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "firstName", "required", "Field is required.")
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "lastName", "required", "Field is required.")
}
}
form.jsp
aşakdaky ýaly bolup biler:
<form:form>
<table>
<tr>
<td>First Name:</td>
<td><form:input path="firstName"/></td>
<%-- Show errors for firstName field --%>
<td><form:errors path="firstName"/></td>
</tr>
<tr>
<td>Last Name:</td>
<td><form:input path="lastName"/></td>
<%-- Show errors for lastName field --%>
<td><form:errors path="lastName"/></td>
</tr>
<tr>
<td colspan="3">
<input type="submit" value="Save Changes"/>
</td>
</tr>
</table>
</form:form>
Eger biz formany firstName
we lastName
meýdanlarynda boş gymmatlar bilen ibersek, HTML ýokardaky ýaly bolup biler:
<form method="POST">
<table>
<tr>
<td>First Name:</td>
<td><input name="firstName" type="text" value=""/></td>
<%-- Associated errors to firstName field displayed --%>
<td><span name="firstName.errors">Field is required.</span></td>
</tr>
<tr>
<td>Last Name:</td>
<td><input name="lastName" type="text" value=""/></td>
<%-- Associated errors to lastName field displayed --%>
<td><span name="lastName.errors">Field is required.</span></td>
</tr>
<tr>
<td colspan="3">
<input type="submit" value="Save Changes"/>
</td>
</tr>
</table>
</form>
Bu sahypa degişli ähli hatalar sanawyny görkezmäge zat barmy? Aşakdaky mysalda görkezilen errors
tagy käbir giňişleýin ýerleşmeleriňe goldaw berýär.
Aşakdaky mysalda sahypanyň ýokarky böleginde hatalar sanawy görkezilýär, şeýle hem meýdanlaryň ýokarsyndaky her bir meýdan üçin aýratyn hatalar görkezilýär:
<form:form>
<form:errors path="*" cssClass="errorBox"/>
<table>
<tr>
<td>First Name:</td>
<td><form:input path="firstName"/></td>
<td><form:errors path="firstName"/></td>
</tr>
<tr>
<td>Last Name:</td>
<td><form:input path="lastName"/></td>
<td><form:errors path="lastName"/></td>
</tr>
<tr>
<td colspan="3">
<input type="submit" value="Save Changes"/>
</td>
</tr>
</table>
</form:form>
HTML ýokardaky ýaly bolup biler:
<form method="POST">
<span name="*.errors" class="errorBox">Field is required.<br/>Field is required.</span>
<table>
<tr>
<td>First Name:</td>
<td><input name="firstName" type="text" value=""/></td>
<td><span name="firstName.errors">Field is required.</span></td>
</tr>
<tr>
<td>Last Name:</td>
<td><input name="lastName" type="text" value=""/></td>
<td><span name="lastName.errors">Field is required.</span></td>
</tr>
<tr>
<td colspan="3">
<input type="submit" value="Save Changes"/>
</td>
</tr>
</table>
</form>
Tegler kitaphanasynyň türk deskriptory spring-form.tld
(TLD) spring-webmvc.jar
içine goşulýar. Aýratyn taglar barada doly maglumat almak üçin API beýlehemendir gözden geçiriň.
HTTP usul üýtgedişleri
REST-iň esasy ýörelgesi "universally interface" ulanmakdan ybaratdyr. Bu ähli çeşmelere (URL-ler) şol bir dört HTTP usulynyň kömegi bilen işlemegi alamatlandyrýar: GET, PUT, POST we DELETE. Her usul üçin HTTP spesifikasiýasy takyk semantikany kesgitleýär. Mysal üçin, GET hemişe howpsyz amal bolmalydyr, beýleki tarapdan, PUT ýa-da DELETE idempotently bolmalydyr, ýagni, siz bu amallary gaýtadan gaýtalamak bilen bir hatarda iň soňunda bir netije almalydyr. Eger HTTP bu dört usuly kesgitlän bolsa, HTML diňe iki usuly goldaýar: GET we POST. Şükürler bolsun, JS ulanyp, PUT ýa-da DELETE ýerine ýetirmegi mümkin, ýa-da bir "hakyky" usul yzyma goşmaça parametr hökmünde ibermek (bir HTML forma içinde gizlin meýdan görnüşine laýyk). Spring-dan HiddenHttpMethodFilter
bu soňky edýänini amala aşyrýar. Bu filtr adaty bir servlet filtirdir, şonuň üçin islendik web framework bilen bilelikde ulanylyp bilner (diňe Spring MVC däl). Bu filtri siziň web.xml içine goşuň, we POST bir method
ulanmak bilen, gizlin parametr soragyna laýyk usulyň HTTP usulyny öwürdiberer.
HTTP usul üýtgedişlerini maksady bilen Spring MVC forma tagy HTTP usulyny girizmek goldawyny döredildi. Mysal üçin Pet Clinic mysalyny bermek:
<form:form method="delete">
<p class="submit"><input type="submit" value="Delete Pet"/></p>
</form:form>
Ýokardaky mysalda HTTP usuly POST çykarylyp, soragyň bir parametri bilen örtülen "hakyky" usul DELETE. Ol, web.xml-de aşakdaky ýaly kesgitlenen HiddenHttpMethodFilter
bilen saklanýar:
<filter>
<filter-name>httpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>httpMethodFilter</filter-name>
<servlet-name>petclinic</servlet-name>
</filter-mapping>
Şuňa laýyk gelýän @Controller
belgilenýän usuly aşakda görkezilýär:
@RequestMapping(method = RequestMethod.DELETE)
public String deletePet(@PathVariable int ownerId, @PathVariable int petId) {
this.clinic.deletePet(petId);
return "redirect:/owners/" + ownerId;
}
@RequestMapping(method = [RequestMethod.DELETE])
fun deletePet(@PathVariable ownerId: Int, @PathVariable petId: Int): String {
clinic.deletePet(petId)
return "redirect:/owners/$ownerId"
}
HTML5 tegleri
Spring forma teglery binasy dinamik atributlaryň girizilmegini üpjün edýär, bu HTML5-e degişli atributlaryň girizilmegine ýol berýär.
Forma input
tagy text
görnüşine degişli bolmadyk beýleki atribut görnüşleriniň girizilmegini goldaýar. Bu HTML5-e degişli täze görnüşleriň, mysal üçin email
, date
, range
we beýlekileriň girizilmegini üpjün edýär. type='text'
girizmek üçin talap edilmeýär, sebäbi text
adaty görnüşdir.
GO TO FULL VERSION