Spring start example "developing a spring framework mvc Application STEP-BY-STEP" analysis (3)

xiaoxiao2021-03-06  60

6, Spring label

In order to use the Spring tag, you need to join in Web.xml

/ Spring

/web-inf/spring.tld

This allows you to use the Spring tag in JSP:

<% @ include file = "/ web-inf / jsp / incrude.jsp"%>

<% @ taglib prefix = "Spring" URI = "/ Spring"%>

<fmt: message key = "title" /> </ title> </ head></p> <p><body></p> <p><h1> <fmt: message key = "priceincrease.Heading" /> </ h1></p> <p><form method = "pos"></p> <p><table width = "95%" BGColor = "f8f8ff" border = "0" cellspacing = "0" cellpadding = "5"></p> <p><tr></p> <p><TD alignment = "Right" width = "20%"> increase (%): </ td></p> <p><Spring: Bind Path = "PriceIncrease.Percentage"></p> <p><TD Width = "20%"></p> <p><Input Type = "text" name = "percentage" value = "<c: out value =" $ {status.value} "/>"></p> <p></ td></p> <p><td width = "60%"></p> <p><font color = "red"> <c: out value = "$ {status.errorMessage}" /> </ font></p> <p></ td></p> <p></ spring: bind></p> <p></ TR></p> <p></ TABLE></p> <p><br></p> <p><Spring: HasbinderRors Name = "PriceInCrease"></p> <p><b> please fix all errors! </ b></p> <p></ Spring: HasbinderRors></p> <p><br> <br></p> <p><Input Type = "Submit" alignment = "center" value = "execute"></p> <p></ form></p> <p><a href="<c:URL value="hello.htm">> Home </a></p> <p></ body></p> <p></ html></p> <p>7. SimpleFormController's operation mechanism, said, for example, SpringAppController, only exercising page process control and model generation, all of which are not related to the FORM of the page, which means that the submission data from the page is not accepted.</p> <p>To handle the submission of the page, let Controller inherit from SimpleFormController.</p> <p>The usual SimpleFormController is defined as follows:</p> <p>Public Class PriceIncreaseformController Extends SimpleFormController {</p> <p>Private productManager product;</p> <p>Public ModilandView OnSubmit (Object Command)</p> <p>Throws servletexception {</p> <p>INT INCREASE = (PriceInCrease) Command .GetPercentage ();</p> <p>Prodman.Increaseprice (Increase);</p> <p>String now = (New java.util.date ()). TOSTRING ();</p> <p>Map mymodel = new hashmap ();</p> <p>MyModel.Put ("now", now);</p> <p>MyModel.put ("Products", getProductManager (). getProducts ());</p> <p>Return New ModelandView (New RedirectView ()));</p> <p>}</p> <p>Protected Object FormBackingObject (httpservletRequest Request) throws servletexception {</p> <p>PriceIncrease priceIncrease = new priceIncrease ();</p> <p>PriceinCrease.setpercentage (20);</p> <p>Return PriceinCrease;</p> <p>}</p> <p>Public Void SetProductManager (ProductManager PM) {</p> <p>PRODMAN = PM;</p> <p>}</p> <p>Public productManager getProductManager () {</p> <p>Return Prodman</p> <p>}</p> <p>}</p> <p>The difference between Controller is more than 2 methods:</p> <p>Public ModilandView OnSubmit (Object Command)</p> <p>Protected Object FormBackingObject (httpservletRequest Request) THROWS ServleTexception</p> <p>Before understanding SimpleFormController, let's take a look at SpringApp-servlet.xml definitions for SimpleFormController:</p> <p><bean id = "priceIncreaseform" class = "Web.PriceInCreaseformController"></p> <p><Property Name = "Sessionform"> <value> True </ value> </ property></p> <p><Property Name = "CommandName"> <value> priceIncrease </ value> </ property></p> <p><Property Name = "CommandClass"> <value> bus.priceincrease </ value> </ proty> <property name = "validator"> <ref bean = "priceIncreaseValidator" /> </ property></p> <p><Property Name = "FormView"> <value> priceIncrease </ value> </ property></p> <p><Property Name = "SuccessView"> <value> Hello.htm </ value> </ property></p> <p><property name = "productManager"></p> <p><ref bean = "prodman" /></p> <p></ Property></p> <p></ bean></p> <p>These definitions are very understanding, of which 2 lines:</p> <p><Property Name = "CommandName"> <value> priceIncrease </ value> </ property></p> <p><Property Name = "CommandClass"> <value> bus.priceincrease </ value> </ property></p> <p>It is pointed out the class of the element of the corresponding page form and its real case object name. (I don't want to use Command, not Form, probably think that submission is command)</p> <p>SpringApp-servlet.xml is as follows:</p> <p><bean id = "urlmapping" class = "org.springframework.web.servlet.Handler.SIMPLEURLHANDLERMAPPING"></p> <p><Property Name = "MAPPINGS"></p> <p><PrOPS></p> <p><prop key = "/ hello.htm> SpringAppController </ prop></p> <p><prop key = "/ priceincrease.htm"> PriceIncReaseform </ prop></p> <p></ prOPS></p> <p></ Property></p> <p></ bean></p> <p>Let's take a look at the operation mechanism of SimpleFormController:</p> <p>Since it is also a Controller, its loading mechanism is the same as other controller. For example, the member property is also automatically initialized.</p> <p>When the page request is handed over to the PriceInCreaseformController process, it first calls the FormBackingObject () method, which is the BEAN corresponding to the page FORM element and assigns the initial value. After completing, you will generate a page display.</p> <p>When the user submits FORM, servlet does not run the PriceInCreaseformController. OnSubmit (), but first run the Support () and Validate (Object Obj, Erroors Erroors) method of the PriceInCreasevalidator. If there is a data error during the verification process (ie, if there is a data error, the error () method assigns the ERRORS.RejectValue () method. [Errors.rejectValue () method to be studied] Once the servlet is found in ERRORS, it will abort the program running directly to the original page, and some of the values ​​stored in Errors can be displayed in the page.</p> <p>If the verification is passed, the onSubmit method of SimpleFormController will start, and its return value is the page that will go.</p> <p>Summarize a full process of the operation of SimpleFormController:</p> <p>Servlet Request -> SimpleFormController.FormBackingObject () -> Show page -> Submit page -> SimpleFormController Validator.validate () -> SimpleFormController. onSubmit () -> View</p></div><div class="text-center mt-3 text-grey"> 转载请注明原文地址:https://www.9cbs.com/read-110493.html</div><div class="plugin d-flex justify-content-center mt-3"></div><hr><div class="row"><div class="col-lg-12 text-muted mt-2"><i class="icon-tags mr-2"></i><span class="badge border border-secondary mr-2"><h2 class="h6 mb-0 small"><a class="text-secondary" href="tag-2.html">9cbs</a></h2></span></div></div></div></div><div class="card card-postlist border-white shadow"><div class="card-body"><div class="card-title"><div class="d-flex justify-content-between"><div><b>New Post</b>(<span class="posts">0</span>) </div><div></div></div></div><ul class="postlist list-unstyled"> </ul></div></div><div class="d-none threadlist"><input type="checkbox" name="modtid" value="110493" checked /></div></div></div></div></div><footer class="text-muted small bg-dark py-4 mt-3" id="footer"><div class="container"><div class="row"><div class="col">CopyRight © 2020 All Rights Reserved </div><div class="col text-right">Processed: <b>0.039</b>, SQL: <b>9</b></div></div></div></footer><script src="./lang/en-us/lang.js?2.2.0"></script><script src="view/js/jquery.min.js?2.2.0"></script><script src="view/js/popper.min.js?2.2.0"></script><script src="view/js/bootstrap.min.js?2.2.0"></script><script src="view/js/xiuno.js?2.2.0"></script><script src="view/js/bootstrap-plugin.js?2.2.0"></script><script src="view/js/async.min.js?2.2.0"></script><script src="view/js/form.js?2.2.0"></script><script> var debug = DEBUG = 0; var url_rewrite_on = 1; var url_path = './'; var forumarr = {"1":"Tech"}; var fid = 1; var uid = 0; var gid = 0; xn.options.water_image_url = 'view/img/water-small.png'; </script><script src="view/js/wellcms.js?2.2.0"></script><a class="scroll-to-top rounded" href="javascript:void(0);"><i class="icon-angle-up"></i></a><a class="scroll-to-bottom rounded" href="javascript:void(0);" style="display: inline;"><i class="icon-angle-down"></i></a></body></html><script> var forum_url = 'list-1.html'; var safe_token = 'w1DmU7VRhrUyfl9lG9gqz0_2FRMuEr188X8HFaw6Epglpctr3m_2BFlOu0oNbfqfaettnxwb5OQ7_2FOEuW4Z7'; var body = $('body'); body.on('submit', '#form', function() { var jthis = $(this); var jsubmit = jthis.find('#submit'); jthis.reset(); jsubmit.button('loading'); var postdata = jthis.serializeObject(); $.xpost(jthis.attr('action'), postdata, function(code, message) { if(code == 0) { location.reload(); } else { $.alert(message); jsubmit.button('reset'); } }); return false; }); function resize_image() { var jmessagelist = $('div.message'); var first_width = jmessagelist.width(); jmessagelist.each(function() { var jdiv = $(this); var maxwidth = jdiv.attr('isfirst') ? first_width : jdiv.width(); var jmessage_width = Math.min(jdiv.width(), maxwidth); jdiv.find('img, embed, iframe, video').each(function() { var jimg = $(this); var img_width = this.org_width; var img_height = this.org_height; if(!img_width) { var img_width = jimg.attr('width'); var img_height = jimg.attr('height'); this.org_width = img_width; this.org_height = img_height; } if(img_width > jmessage_width) { if(this.tagName == 'IMG') { jimg.width(jmessage_width); jimg.css('height', 'auto'); jimg.css('cursor', 'pointer'); jimg.on('click', function() { }); } else { jimg.width(jmessage_width); var height = (img_height / img_width) * jimg.width(); jimg.height(height); } } }); }); } function resize_table() { $('div.message').each(function() { var jdiv = $(this); jdiv.find('table').addClass('table').wrap('<div class="table-responsive"></div>'); }); } $(function() { resize_image(); resize_table(); $(window).on('resize', resize_image); }); var jmessage = $('#message'); jmessage.on('focus', function() {if(jmessage.t) { clearTimeout(jmessage.t); jmessage.t = null; } jmessage.css('height', '6rem'); }); jmessage.on('blur', function() {jmessage.t = setTimeout(function() { jmessage.css('height', '2.5rem');}, 1000); }); $('#nav li[data-active="fid-1"]').addClass('active'); </script>