рдЧрд╛рдЗрдб: рдерд╛рдЗрдореЗрд▓рдл + рд╡рд╕рдВрддред рднрд╛рдЧ реи

рдкрд╣рд▓рд╛ рднрд╛рдЧ
рддреАрд╕рд░рд╛ рднрд╛рдЧ

5 рдкреНрд░рджрд░реНрд╢рди рдмреАрдЬ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдбреЗрдЯрд╛



рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ /WEB-INF/templates/seedstartermng.html рдкреЗрдЬ рд╢реЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реВрдЪреА рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реВрдЪреА рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреБрдЫ рдмрд╛рд╣рд░реА рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдореЙрдбрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣:

<div class="seedstarterlist" th:unless="${#lists.isEmpty(allSeedStarters)}"> <h2 th:text="#{title.list}">List of Seed Starters</h2> <table> <thead> <tr> <th th:text="#{seedstarter.datePlanted}">Date Planted</th> <th th:text="#{seedstarter.covered}">Covered</th> <th th:text="#{seedstarter.type}">Type</th> <th th:text="#{seedstarter.features}">Features</th> <th th:text="#{seedstarter.rows}">Rows</th> </tr> </thead> <tbody> <tr th:each="sb : ${allSeedStarters}"> <td th:text="${{sb.datePlanted}}">13/01/2011</td> <td th:text="#{|bool.${sb.covered}|}">yes</td> <td th:text="#{|seedstarter.type.${sb.type}|}">Wireframe</td> <td th:text="${#strings.arrayJoin( #messages.arrayMsg( #strings.arrayPrepend(sb.features,'seedstarter.feature.')), ', ')}">Electric Heating, Turf</td> <td> <table> <tbody> <tr th:each="row,rowStat : ${sb.rows}"> <td th:text="${rowStat.count}">1</td> <td th:text="${row.variety.name}">Thymus Thymi</td> <td th:text="${row.seedsPerCell}">12</td> </tr> </tbody> </table> </td> </tr> </tbody> </table> </div> 


рджреЗрдЦрдиреЗ рдХреЛ рдмрд╣реБрдд рдХреБрдЫ рд╣реИред рдЖрдЗрдП рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рджреЗрдЦреЗрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЦрдВрдб рдХреЗрд╡рд▓ рддрднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧрд╛ рдЬрдм рдмреАрдЬ рд╢реБрд░реБрдЖрдд рд╣реЛред рд╣рдо рдЗрд╕реЗ рд╡реЗрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ : рдХрднреА рднреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдФрд░ # lists.isEmpty (...) рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВред

 <div class="seedstarterlist" th:unless="${#lists.isEmpty(allSeedStarters)}"> 


рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рднреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╡рд╕реНрддреБрдПрдВ, рдЬреИрд╕реЗ # рд▓рд┐рд╕реНрдЯ , рд╕реНрдкреНрд░рд┐рдВрдЧ рдИрдПрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рдЬреИрд╕реЗ рдУрдЬреАрдПрдирдПрд▓ рдореЗрдВ рдорд╛рдирдХ рдмреЛрд▓реА рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВред

рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓реА рдмрд╛рдд рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХреГрдд (рдмрд╛рд╣рд░реА) рдЧреНрд░рдВрде рд╣реИрдВ, рдЬреИрд╕реЗ:

<h2 th: text = "# {title.list}"> рдмреАрдЬ рд╢реБрд░реБрдЖрдд рдХреА рд╕реВрдЪреА

 <table> <thead> <tr> <th th:text="#{seedstarter.datePlanted}">Date Planted</th> <th th:text="#{seedstarter.covered}">Covered</th> <th th:text="#{seedstarter.type}">Type</th> <th th:text="#{seedstarter.features}">Features</th> <th th:text="#{seedstarter.rows}">Rows</th> ... 


рдпрд╣ рдПрдХ рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ, рд╣рдордиреЗ рдЕрдкрдиреЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА MessageSource рдмреАрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ ( MessageSource рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдкреНрд░рд┐рдВрдЧ MVC рдореЗрдВ рдмрд╛рд╣рд░реА рдЧреНрд░рдВрдереЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдорд╛рдирдХ рддрд░реАрдХрд╛ рд╣реИ):

 @Bean public ResourceBundleMessageSource messageSource() { ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); messageSource.setBasename("Messages"); return messageSource; } 


... рдФрд░ рдЗрд╕ рдмреЗрд╕рди рдкреНрд░реЙрдкрд░реНрдЯреА рд╕реЗ рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ classpath рдореЗрдВ рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрдВрдЧреА, рдЬреИрд╕реЗ рдХрд┐ Message_es.properties рдпрд╛ Messages_en.properties ред рдЖрдЗрдП рд╕реНрдкреИрдирд┐рд╢ рд╕рдВрд╕реНрдХрд░рдг рджреЗрдЦреЗрдВ:

 title.list=Lista de semilleros date.format=dd/MM/yyyy bool.true=s├н bool.false=no seedstarter.datePlanted=Fecha de plantaci├│n seedstarter.covered=Cubierto seedstarter.type=Tipo seedstarter.features=Caracter├нsticas seedstarter.rows=Filas seedstarter.type.WOOD=Madera seedstarter.type.PLASTIC=Pl├бstico seedstarter.feature.SEEDSTARTER_SPECIFIC_SUBSTRATE=Sustrato espec├нfico para semilleros seedstarter.feature.FERTILIZER=Fertilizante seedstarter.feature.PH_CORRECTOR=Corrector de PH 


рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдкрд╣рд▓реЗ рдХреЙрд▓рдо рдореЗрдВ рд╣рдо рддрд╛рд░реАрдЦ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдЬрдм рд╕реНрдЯрд╛рд░реНрдЯрд░ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ рджрд┐рдЦрд╛рдПрдВрдЧреЗ рдХрд┐ рдпрд╣ рд╕реНрд╡рд░реВрдкрд┐рдд рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдЕрдкрдиреЗ DateFormatter рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдбрдмрд▓-рдмреНрд░реИрдХреЗрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ ( $ {{...}} ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рд░реВрдкрд╛рдВрддрд░рдг рд╕реЗрд╡рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрдлрд╝реЙрд░реНрдореЗрдЯрд░ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдерд╛ред

 <td th:text="${{sb.datePlanted}}">13/01/2011</td> 


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдмреАрдЬ рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╕реАрдб рдХрдВрдЯреЗрдирд░ рдХреЛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдмреВрд▓рд┐рдпрди рдХрд╡рд░ рдмрд┐рди рдХреЗ рд╕рдВрдкрддреНрддрд┐ рдореВрд▓реНрдп рдХреЛ рдПрдХ рдЕрдВрддрд░рд░рд╛рд╖реНрдЯреНрд░реАрдп рд╕реНрддрд░ рдкрд░ рд╣рд╛рдВ рдпрд╛ рдирд╣реАрдВ рдореЗрдВ рд╢рд╛рдмреНрджрд┐рдХ рд▓реБрдХрдЕрдк рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдХреЗ:

 <td th:text="#{|bool.${sb.covered}|}">yes</td> 


рдЕрдм рд╣рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмреАрдЬ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХрдВрдЯреЗрдирд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкреНрд░рдХрд╛рд░ рджреЛ рдорд╛рдиреЛрдВ ( WOOD рдФрд░ PLASTIC ) рдХреЗ рд╕рд╛рде рдПрдХ рдЬрд╛рд╡рд╛ рдЧрдгрдирд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЕрдкрдиреЗ рд╕рдВрджреЗрд╢ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреЛ рдЧреБрдг рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рд╣реИрдВ рдЬрд┐рдирдХреЗ рдирд╛рдо seedstarter.type.WOO D рдФрд░ seedstarter.type.PLASTIC рд╣реИрдВ ред

рд▓реЗрдХрд┐рди рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХреГрдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ seedstarter.type рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдирдо рдХреЗ рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрд╕рд░реНрдЧ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдо рддрдм рд╕рдВрджреЗрд╢ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:

 <td th:text="#{|seedstarter.type.${sb.type}|}">Wireframe</td> 


рдЗрд╕ рд╕реВрдЪреА рдХрд╛ рд╕рдмрд╕реЗ рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ рдлреАрдЪрд░ рдХреЙрд▓рдо рд╣реИред рдЗрд╕рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рдлрд╝реАрдЪрд░ рдПрдиреБрдорд░реЗрд╢рдиреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЬреИрд╕реЗ " рдЗрд▓реЗрдХреНрдЯреНрд░рд┐рдХ рд╣реАрдЯрд┐рдВрдЧ, рд▓реЙрди ред"

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрдард┐рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрди рдИрдирдо рдорд╛рдиреЛрдВ рдХреЛ рднреА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдерд╛ред рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:

  • рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдпреБрдХреНрдд рдЙрдкрд╕рд░реНрдЧ рдХреЛ рд╕рд░рдгреАред
  • рдЪрд░рдг 1 рдореЗрдВ рд╕рднреА рдХреБрдВрдЬреА рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рдмрд╛рд╣рд░реА рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
  • рдЪрд░рдг 2 рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╕рднреА рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдПрдХ рд╡рд┐рднрд╛рдЬрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВред


рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдмрдирд╛рддреЗ рд╣реИрдВ:

 <td th:text="${#strings.arrayJoin( #messages.arrayMsg( #strings.arrayPrepend(sb.features,'seedstarter.feature.')), ', ')}">Electric Heating, Turf</td> 


рд╣рдорд╛рд░реА рд╕реВрдЪреА рдХрд╛ рдЕрдВрддрд┐рдо рд╕реНрддрдВрдн рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЗрд╕рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреА рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдЯреЗрдмрд▓ рд╣реИ:

 <td> <table> <tbody> <tr th:each="row,rowStat : ${sb.rows}"> <td th:text="${rowStat.count}">1</td> <td th:text="${row.variety.name}">Thymus Thymi</td> <td th:text="${row.seedsPerCell}">12</td> </tr> </tbody> </table> </td> 


6 рдлреЙрд░реНрдо рдмрдирд╛рдирд╛



6.1 рдПрдХ рдХрдорд╛рдВрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛



рдХрдорд╛рдВрдб рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╣ рдирд╛рдо рд╣реИ рдЬрд┐рд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА рдлреЙрд░реНрдо рд╕рдкреЛрд░реНрдЯ рдмреАрдиреНрд╕ рджреЗрддрд╛ рд╣реИ, рдпрд╛рдиреА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЬреЛ рдлрд╝реАрд▓реНрдб рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдорд╛рдиреЛрдВ рдХреЛ рд╕реЗрдЯ рдФрд░ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред

Thymeleaf рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ <form> рдЯреИрдЧ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдХрдорд╛рдВрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:

 <form action="#" th:action="@{/seedstartermng}" th:object="${seedStarter}" method="post"> ... </form> 


рдпрд╣ рд╡реЗрдВ: рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдПрдХ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рджреГрд╢реНрдп рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдЙрдЪрд┐рдд рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реАрдорд╛рдПрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ:

  • рд╡реЗрдВ: рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреИрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рди рд╡реИрд░рд┐рдПрдмрд▓ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди ( $ {...} ) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдЧреБрдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдХреЗрд╡рд▓ рдореЙрдбрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ $ {seedStarter} рдЬреИрд╕реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдорд╛рдиреНрдп рд╣реИ, рд▓реЗрдХрд┐рди $ {seedStarter.data} рдирд╣реАрдВ рд╣реЛрдЧреАред
  • <рдлрд╝реЙрд░реНрдо> рдЯреИрдЧ рдХреЗ рдЕрдВрджрд░ , рдПрдХ рдФрд░ рд╡реЗрдВ: рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ рдХрд┐ HTML рд░реВрдкреЛрдВ рдХреЛ рдиреЗрд╕реНрдЯреЗрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


6.2 рдЗрдирдкреБрдЯ



рдЖрдЗрдП рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдлреЙрд░реНрдо рдореЗрдВ рдЗрдирдкреБрдЯ рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВ:

 <input type="text" th:field="*{datePlanted}" /> 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдПрдХ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреЗрд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ: th: рдлрд╝реАрд▓реНрдб ред рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рдлреЙрд░реНрдо рд╕рдкреЛрд░реНрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ рдореЗрдВ рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдмрд╛рдБрдзрдиреЗ рдХреА рдкреВрд░реА рдореЗрд╣рдирдд рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ MVC JSP рдЯреИрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЯреИрдЧ рдореЗрдВ рдкрде рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рдордХрдХреНрд╖ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

Th: рдлрд╝реАрд▓реНрдб рд╡рд┐рд╢реЗрд╖рддрд╛ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ рдХрд┐ рдпрд╣ <input>, <select> рдпрд╛ <textarea> рдЯреИрдЧ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ (рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ <input> рдЯреИрдЧ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ)ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ (рдЗрдирдкреБрдЯ [рдкреНрд░рдХрд╛рд░ = рдкрд╛рда]) рдХреЛрдб рдХреА рдЙрдкрд░реЛрдХреНрдд рд░реЗрдЦрд╛ рдирд┐рдореНрди рдХреЗ рд╕рдорд╛рди рд╣реИ:

 <input type="text" id="datePlanted" name="datePlanted" th:value="*{datePlanted}" /> 


... рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗрдВ: рдлрд╝реАрд▓реНрдб рднреА рдкрдВрдЬреАрдХреГрдд рд╕реНрдкреНрд░рд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрдлрд╝реЙрд░реНрдореЗрдЯрд░ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ , рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рднреА рджреЗрдЦрд╛ рдерд╛ (рднрд▓реЗ рд╣реА рдХреНрд╖реЗрддреНрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╡рд░реНрдЧ рдХреЛрд╖реНрдардХ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдирд╣реАрдВ рд╣реИ)ред рдЗрд╕рдХреЗ рдХрд╛рд░рдг, рджрд┐рдирд╛рдВрдХ рд╕рд╣реА рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╡реЗрдВ рдХреЗ рд▓рд┐рдП рдорд╛рди : рдлрд╝реАрд▓реНрдб рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЪрдпрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ ( * {...} ) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдЗрд╕ рддрдереНрдп рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдПрдХ рдШрдЯрдХ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдлрд╝реЙрд░реНрдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рд╕рдВрджрд░реНрдн рдЪрд░ (рдпрд╛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА рд╢рдмреНрджрдЬрд╛рд▓ рдореЗрдВ рдореЙрдбрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ) рдкрд░ред )ред

рд╡реЗрдВ рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╡рд┐рдкрд░реАрдд : рдСрдмреНрдЬреЗрдХреНрдЯ , рдЗрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрд┐рд╕реА рднреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ <form: input> JSP рдЯреИрдЧ рдХреА рдкрде рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ рд╣реИ)ред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ th: рдлрд╝реАрд▓реНрдб HTML5 рдореЗрдВ рд╢реБрд░реВ рдХрд┐рдП рдЧрдП <рдЗрдирдкреБрдЯ> рддрддреНрд╡ рдХреЗ рдирдП рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рднреА рд╕рдордЭрддрд╛ рд╣реИ, рдЬреИрд╕реЗ <рдЗрдирдкреБрдЯ рдкреНрд░рдХрд╛рд░ = "рдбреЗрдЯрд╛рдЯрд╛рдЗрдо" ... />, <рдЗрдирдкреБрдЯ рдкреНрд░рдХрд╛рд░ = "рд░рдВрдЧ" ... />, рдЖрджрд┐, рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗред рд╕реНрдкреНрд░рд┐рдВрдЧ MVC рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг HTML5 рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛ред

6.3 рдЪреЗрдХрдмреЙрдХреНрд╕ рдлрд╝реАрд▓реНрдб



th: рдлрд╝реАрд▓реНрдб рдЖрдкрдХреЛ рдЭрдВрдбреЗ рдХреЗ рд▓рд┐рдП рдЪреЗрдХрдмреЙрдХреНрд╕ рдЗрдирдкреБрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдЗрдП рд╣рдорд╛рд░реЗ HTML рдкреГрд╖реНрда рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:

 <div> <label th:for="${#ids.next('covered')}" th:text="#{seedstarter.covered}">Covered</label> <input type="checkbox" th:field="*{covered}" /> </div> 


рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдзреНрд╡рдЬ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдФрд░ рднреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрд╛рд╣рд░реА рд▓реЗрдмрд▓, рд╕рд╛рде рд╣реА рдЙрд╕ рдорд╛рди рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП # ids.next ('рдмрдВрдж') рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЬреЛ рдзреНрд╡рдЬ рдХреЗ рдЗрдирдкреБрдЯ рдХреА рдЖрдИрдбреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛ред

рд╣рдореЗрдВ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдЖрдИрдбреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдЪреВрдВрдХрд┐ рдЭрдВрдбреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдмрд╣реБ-рдореВрд▓реНрдпрд╡рд╛рди рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдкреНрд░рддреНрдпрдп рд╣рдореЗрд╢рд╛ рдЙрдирдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ (рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ # ids.seq (...) рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдХ рд╣реА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдЗрдирдкреБрдЯ рдЭрдВрдбреЗ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдорд╛рди рд╣реИ ред

рдЕрдЧрд░ рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрд╣реБ-рдореВрд▓реНрдпрд╡рд╛рди рдЪреЗрдХ рдмреЙрдХреНрд╕ рдХреЛ рджреЗрдЦреЗрдВ рддреЛ рдпрд╣ рджреЗрдЦрдирд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реЛрдЧрд╛:

 <ul> <li th:each="feat : ${allFeatures}"> <input type="checkbox" th:field="*{features}" th:value="${feat}" /> <label th:for="${#ids.prev('features')}" th:text="#{${'seedstarter.feature.' + feat}}">Heating</label> </li> </ul> 


рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдмрд╛рд░ рд╣рдордиреЗ рд╡реЗрдВ: рдореВрд▓реНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдлрд╝реАрд▓реНрдб рддрд╛рд░реНрдХрд┐рдХ рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИред

рдЖрдЗрдП рдЗрд╕ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди HTML рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦреЗрдВ:

 <ul> <li> <input id="features1" name="features" type="checkbox" value="SEEDSTARTER_SPECIFIC_SUBSTRATE" /> <input name="_features" type="hidden" value="on" /> <label for="features1">Seed starter-specific substrate</label> </li> <li> <input id="features2" name="features" type="checkbox" value="FERTILIZER" /> <input name="_features" type="hidden" value="on" /> <label for="features2">Fertilizer used</label> </li> <li> <input id="features3" name="features" type="checkbox" value="PH_CORRECTOR" /> <input name="_features" type="hidden" value="on" /> <label for="features3">PH Corrector used</label> </li> </ul> 


рдпрд╣рд╛рдВ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЖрдИрдбреА рдЗрдирдкреБрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдЕрдиреБрдХреНрд░рдо рдкреНрд░рддреНрдпрдп рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ # ids.prev (...) рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдирдкреБрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрдиреНрди рдЕрдВрддрд┐рдо рдЕрдиреБрдХреНрд░рдо рдорд╛рди рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдирд╛рдо = "_ рдлреАрдЪрд░" рдХреЗ рд╕рд╛рде рдЗрди рдЫрд┐рдкреЗ рд╣реБрдП рдЗрдирдкреБрдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ: рд╡реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдлрд╝реЙрд░реНрдо рд╕рдмрдорд┐рдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдЪрдпрдирд┐рдд рдзреНрд╡рдЬ рдорд╛рди рдирд╣реАрдВ рднреЗрдЬрддреЗ рд╣реИрдВред

рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рд╣рдорд╛рд░реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рд╣рдорд╛рд░реЗ рдлреЙрд░реНрдо-рдмреИрдХрд┐рдВрдЧ рдмреАрди рдореЗрдВ рдХреБрдЫ рдЪрдпрдирд┐рдд рдорд╛рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рддреЛ th: рдлрд╝реАрд▓реНрдб рдЗрд╕ рдмрд╛рдд рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдЗрдирдкреБрдЯ рдЯреИрдЧ рдореЗрдВ рдЪреЗрдХ рдХрд┐рдП рдЧрдП = "рдЪреЗрдХ рдХрд┐рдП рдЧрдП" рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЬреЛрдбрд╝реЗрдЧрд╛ред

6.4 рд░реЗрдбрд┐рдпреЛ рдмрдЯрди рдлрд╝реАрд▓реНрдб



рд╕реНрд╡рд┐рдЪ рдлрд╝реАрд▓реНрдб рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЧреИрд░-рдмреВрд▓рд┐рдпрди (рдмрд╣реБ-рдореВрд▓реНрдпрд╡рд╛рди) рдЭрдВрдбреЗ рдХреЗ рд╕рдорд╛рди рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╡реЗ рдореВрд▓реНрдпрд╡рд╛рди рдирд╣реАрдВ рд╣реИрдВ:

 <ul> <li th:each="ty : ${allTypes}"> <input type="radio" th:field="*{type}" th:value="${ty}" /> <label th:for="${#ids.prev('type')}" th:text="#{${'seedstarter.type.' + ty}}">Wireframe</label> </li> </ul> 


6.5 рдбреНрд░реЙрдкрдбрд╛рдЙрди / рд╕реВрдЪреА рдЪрдпрдирдХрд░реНрддрд╛



рдЪрдпрди рдлрд╝реАрд▓реНрдб рдореЗрдВ рджреЛ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ: <select> рдЯреИрдЧ рдФрд░ рдЙрд╕рдХрд╛ рдиреЗрд╕реНрдЯреЗрдб <рд╡рд┐рдХрд▓реНрдк> рдЯреИрдЧред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреНрд╖реЗрддреНрд░ рдмрдирд╛рддреЗ рд╕рдордп, рдХреЗрд╡рд▓ <select> рдЯреИрдЧ рдореЗрдВ th: рдлрд╝реАрд▓реНрдб рд╡рд┐рд╢реЗрд╖рддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдиреЗрд╕реНрдЯреЗрдб <рд╡рд┐рдХрд▓реНрдк> рдЯреИрдЧ рдореЗрдВ рдореВрд▓реНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдВрдЧреА рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЪрдпрдирд┐рдд рд╡рд┐рдХрд▓реНрдк рдХреНрдпрд╛ рд╣реИ (рдЧреИрд░-рдмреВрд▓рд┐рдпрди рдлрд╝реНрд▓реИрдЧ рдФрд░ рд░реЗрдбрд┐рдпреЛ рдмрдЯрди рдХреЗ рд╕рдорд╛рди) )ред

рдЖрдЗрдП рдПрдХ рдбреНрд░реЙрдкрдбрд╛рдЙрди рдкреНрд░рдХрд╛рд░ рдлрд╝реАрд▓реНрдб рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ:

 <select th:field="*{type}"> <option th:each="type : ${allTypes}" th:value="${type}" th:text="#{${'seedstarter.type.' + type}}">Wireframe</option> </select> 


рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдХреЛрдб рдХреЗ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЛ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреИрд╕реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣рдореЗрдВ рд╡реЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ : рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ <рд╡рд┐рдХрд▓реНрдк> рдЯреИрдЧ рдореЗрдВ рд╣реА рд╣реИред

6.6 рдЧрддрд┐рд╢реАрд▓ рдХреНрд╖реЗрддреНрд░



рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА рдореЗрдВ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдлреЙрд░реНрдо рдлрд╝реАрд▓реНрдб рдХреА рдЙрдиреНрдирдд рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдЕрдкрдиреЗ рдлреЙрд░реНрдо-рдмреИрдХрд┐рдВрдЧ рдмреАрди рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рдлреЙрд░реНрдо рдлрд╝реАрд▓реНрдб рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рд╕реНрдкреНрд░рд┐рдВрдЧ рдИрдПрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╣рдореЗрдВ рд╣рдорд╛рд░реЗ SeedStarter рдШрдЯрдХ рдореЗрдВ рдирдИ рд░реЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░ рдЗрди рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╣рдорд╛рд░реЗ рдлреЙрд░реНрдо рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдХреБрдЫ рдирдП рдореИрдк рдХрд┐рдП рдЧрдП рддрд░реАрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рдЕрдиреБрд░реЛрдз рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣рдорд╛рд░реЗ SeedStarter рд╕реЗ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдпрд╛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ:

 @RequestMapping(value="/seedstartermng", params={"addRow"}) public String addRow(final SeedStarter seedStarter, final BindingResult bindingResult) { seedStarter.getRows().add(new Row()); return "seedstartermng"; } @RequestMapping(value="/seedstartermng", params={"removeRow"}) public String removeRow( final SeedStarter seedStarter, final BindingResult bindingResult, final HttpServletRequest req) { final Integer rowId = Integer.valueOf(req.getParameter("removeRow")); seedStarter.getRows().remove(rowId.intValue()); return "seedstartermng"; } 


рдФрд░ рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдлреЙрд░реНрдо рдореЗрдВ рдПрдХ рдбрд╛рдпрдирд╛рдорд┐рдХ рдЯреЗрдмрд▓ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

 <table> <thead> <tr> <th th:text="#{seedstarter.rows.head.rownum}">Row</th> <th th:text="#{seedstarter.rows.head.variety}">Variety</th> <th th:text="#{seedstarter.rows.head.seedsPerCell}">Seeds per cell</th> <th> <button type="submit" name="addRow" th:text="#{seedstarter.row.add}">Add row</button> </th> </tr> </thead> <tbody> <tr th:each="row,rowStat : *{rows}"> <td th:text="${rowStat.count}">1</td> <td> <select th:field="*{rows[__${rowStat.index}__].variety}"> <option th:each="var : ${allVarieties}" th:value="${var.id}" th:text="${var.name}">Thymus Thymi</option> </select> </td> <td> <input type="text" th:field="*{rows[__${rowStat.index}__].seedsPerCell}" /> </td> <td> <button type="submit" name="removeRow" th:value="${rowStat.index}" th:text="#{seedstarter.row.remove}">Remove row</button> </td> </tr> </tbody> </table> 


рдпрд╣рд╛рдБ рдкрд░реНрдпрд╛рдкреНрдд рдЪреАрдЬреЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрддрдиреА рдирд╣реАрдВ рдХрд┐ рд╕рдордЭ рдореЗрдВ рди рдЖрдП ... рд╕рд┐рд╡рд╛рдп рдПрдХ рдЕрдЬреАрдм рдмрд╛рдд рдХреЗ:

 <select th:field="*{rows[__${rowStat.index}__].variety}"> ... </select> 


рдпрджрд┐ рдЖрдк рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╕реЗ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ , " рдерд╛рдЗрдореЗрд▓реНрдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, " рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ __ $ {...} __ рдПрдХ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ, рдЬреЛ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рд╕рдВрдкреВрд░реНрдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореВрд▓реНрдпрд╛рдВрдХрди рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкрдВрдХреНрддрд┐ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рддрд░реАрдХрд╛ рдХреНрдпреЛрдВ? рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛:

 <select th:field="*{rows[rowStat.index].variety}"> ... </select> 


... рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдкреНрд░рд┐рдВрдЧ рдИрдПрд▓ рд╕рд░рдгреА рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рдХреЛрд╖реНрдардХ рдореЗрдВ рдЪрд░ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдкрдВрдХреНрддрд┐рдпрд╛рдБ [rowStat.index] ( рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп [0] , рдкрдВрдХреНрддрд┐рдпреЛрдВ [1] , рдЖрджрд┐ред ) рдкрдВрдХреНрддрд┐ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЕрдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдкреНрд░реА-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреА рдЬрд░реВрд░рдд рд╣реИред

рд╣рдо рдХрдИ рдмрд╛рд░ "рд░реЛ рдЬреЛрдбрд╝реЗрдВ" рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкрд░рд┐рдгрд╛рдореА HTML рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рджреЗрдЦрддреЗ рд╣реИрдВ:

 <tbody> <tr> <td>1</td> <td> <select id="rows0.variety" name="rows[0].variety"> <option selected="selected" value="1">Thymus vulgaris</option> <option value="2">Thymus x citriodorus</option> <option value="3">Thymus herba-barona</option> <option value="4">Thymus pseudolaginosus</option> <option value="5">Thymus serpyllum</option> </select> </td> <td> <input id="rows0.seedsPerCell" name="rows[0].seedsPerCell" type="text" value="" /> </td> <td> <button name="removeRow" type="submit" value="0">Remove row</button> </td> </tr> <tr> <td>2</td> <td> <select id="rows1.variety" name="rows[1].variety"> <option selected="selected" value="1">Thymus vulgaris</option> <option value="2">Thymus x citriodorus</option> <option value="3">Thymus herba-barona</option> <option value="4">Thymus pseudolaginosus</option> <option value="5">Thymus serpyllum</option> </select> </td> <td> <input id="rows1.seedsPerCell" name="rows[1].seedsPerCell" type="text" value="" /> </td> <td> <button name="removeRow" type="submit" value="1">Remove row</button> </td> </tr> </tbody> 

Source: https://habr.com/ru/post/hi435080/


All Articles