2011-03-07

Spring MVC 3.0.5 之三

  • 兩種使用 JSP & JSTL 的方式:
    • ResourceBundleViewResolver - 可以混合多種 view。
      <!-- the ResourceBundleViewResolver -->
      <bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
        <property name="basename" value="views"/>
      </bean>
      
      # And a sample properties file is uses (views.properties in WEB-INF/classes):
      welcome.(class)=org.springframework.web.servlet.view.JstlView
      welcome.url=/WEB-INF/jsp/welcome.jsp
      
      productList.(class)=org.springframework.web.servlet.view.JstlView
      productList.url=/WEB-INF/jsp/productlist.jsp
    • InternalResourceViewResolver
      <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>
  • 使用 Spring form tag
    • 設定
      • tag library 在 spring-webmvc.jar 裡,tag descriptor 為 spring-form.tld。
        <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
    • form:form
      • 可用 commandName 指定 form backing object 的名字,預設為 command。
      • form:form 會將 command object 放到 page context 裡,供其他 form tag 使用。
      • 怎沒提到 modelAttribute。
        <form:form commandName="user">
            <form:input path="firstName" />
            <input type="submit" value="Save Changes" />
        </form:form>
    • form:input
    • form:checkbox
    • form:checkboxes
    • form:radiobutton
    • form:radiobuttons
    • form:password
    • form:select
    • form:option
    • form:options
    • form:textarea
    • form:hidden
    • form:errors
      • 以 span 呈現驗證訊息。
      • 可以用 path="*" 顯示所有的驗證訊息。
        <form:input path="firstName" />
        <form:errors path="firstName" />
  • Tiles
    • 需要的 library:
      • Tiles 2.1.2 以上的版本
      • Commons BeanUtils
      • Commons Digester
      • Commons Logging
    • 設定
      <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
        <property name="definitions">
          <list>
            <value>/WEB-INF/defs/general.xml</value>
            <value>/WEB-INF/defs/widgets.xml</value>
          </list>
        </property>
      </bean>
    • 有兩個 view resolver 可以用:
      • UrlBasedViewResolver
        <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
          <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>
        </bean>
        // 簡易版設定
        <bean class="org.springframework.web.servlet.view.tiles2.TilesViewResolver"/>
      • ResourceBundleViewResolver - 可以混合多種 view。
        <bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
          <property name="basename" value="views"/>
        </bean>
        welcomeView.(class)=org.springframework.web.servlet.view.tiles2.TilesView
        welcomeView.url=welcome (this is the name of a Tiles definition)
        
        vetsView.(class)=org.springframework.web.servlet.view.tiles2.TilesView
        vetsView.url=vetsView (again, this is the name of a Tiles definition)
        
        findOwnersForm.(class)=org.springframework.web.servlet.view.JstlView
        findOwnersForm.url=/WEB-INF/jsp/findOwners.jsp
    • Tiles 2 內建支援 JSTL。
  • AJAX
    • 首先要有 jackson-core-asl.jar 與 jackson-mapper-asl.jar 兩個 library,pom 設定如下:
      <dependency>
          <groupId>org.codehaus.jackson</groupId>
          <artifactId>jackson-mapper-asl</artifactId>
          <version>1.7.3</version>
          <type>jar</type>
          <scope>runtime</scope>
      </dependency>
    • 接下來只要使用 @ResponseBody 就可以了。
      @RequestMapping("/ajax")
      public @ResponseBody Map<String, String> ajax() {
          Map<String, String> map = new HashMap<String, String>();
          map.put("a", "aaa");
          return map;
      }

沒有留言:

張貼留言