暑假学习5(7.16)

                今天,我们学习了使用了HTML页面。使用HTML页面的好处是为了与美工的设计界面相一致,因为美工一般都制作的HTML页面,而并非.jsp页面,为了实现网站页面设计与后天程序代码的执行一致,我们需要使用HTML页面,这就需要一个可以对HTML页面解析的页面解析器,即thymeleaf。首先我们要在servlet文件中配置这个视图解析器,在这个的使用过程中注意第四行的路径的设定时一定要和自己工程的html页面的存放路径一致,详细代码如下:

<!-- thymeleaf的视图解析器 -->	
<bean id="templateResolver"		
class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">	
<property name="prefix" value="/WEB-INF/html/" />	
<property name="suffix" value=".html" />		
<property name="templateMode" value="HTML5" />	
</bean>	
<bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">	
<property name="templateResolver" ref="templateResolver" />	
</bean>	
<bean id="viewResolverThymeleaf" class="cn.agriculture.common.component.ThymeleafViewResolverEx">
<property name="templateEngine" ref="templateEngine" />	
<property name="characterEncoding" value="UTF-8"/>
 <property name="order" value="0"/>	
</bean>

               由于之前我们并使用的是Jsp页面,所以我们在配置文件中有关于Jsp的页面解析器,即ViewReslover,这个是SpringMVC的内置视图解析器,但是在页面解析的过程中,我们设置它是后被调用来解析的。在我们的controller的后台代码中,我们通过返回一个字符串来表示那个页面的显示,这个过程是在servlet中配置过的。对于返回的字符串,我们会先对通过我们今天配置的thymeleaf来先判断是否可以解析为一个HTML页面,然后不可以的时候就抛出错误,但是在我们的项目中,我们并没有抛出异常,因为我们在第一次解析中加入我们自定义的一个类在cn.agriculture.common.component这个包中,这个类的代码如下:

public class ThymeleafViewResolverEx extends ThymeleafViewResolver {	
@Override	
public View resolveViewName(String viewName, Locale locale) throws Exception {
ServletContextTemplateResolver servletContextTemplateResolver = 
       (ServletContextTemplateResolver)this.getWebApplicationContext().getBean("templateResolver");
servletContextTemplateResolver.initialize();		
String prefix = servletContextTemplateResolver.getPrefix().substring(1);
String suffix = servletContextTemplateResolver.getSuffix();
//String str = getClass().getResource("/").toString().replace("file:/", "")
.replace("/WEB-INF/classes/", "");	
//log.info("*****************************" + str);		
log.info("-----------------------------" + this.getServletContext().getRealPath("/"));		
File file = new File(this.getServletContext().getRealPath("/") + prefix + viewName + suffix);	
if (!file.exists()){			return null;		}	
return super.resolveViewName(viewName, locale);	}}   

         在这个类的作用下,我们可以先对controller返回的一个字符串做HTML页面的解析,在没有相应的HTML页面再进行Jsp的解析,即调用SpringMVC的内部视图解析器。若我们不需要这样的帮助时,我们可以将第一段代码中的最后一个bean的class属性值选择为ThymeleafViewResolver的包名。当我们因为类找不到时,我们可以通过复制类,然后按住ctrl+shfit+t来快捷提示对应的类的位置,然后将对应的包找到复制到我们工程WebContent的WEB-INF文件夹下的lib中,这样我们可以实现HTML的解析。

         在今天的工程中我们学习了封Bean的使用,即使用lombok这个包,这个包是可以直接执行添加在我们的eclipse中成为我们的一个系统包。在这个包的作用下,我们可以实现不用再定义属性的set与get方法而是通过@Data注释来封装定义属性值的set与get方法,当然我们要引入对应的类-lombok.Data。

         在HTML页面的解析中,我们需要注意之前在jsp页面开头的添加inlude.jsp文件要被替换为:

<!DOCTYPE html SYSTEM " 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">

       通过这个,我们才可以正常实现Thymeleaf解析器的一些以<th:>开头的属性的解析。与之前Jsp页面不同的是我们不能使用之前的Jstl的标签,即循环中的<c:forEach item="${list}" var="goodsInfo" varStatus="status">,而应该通过<tr th:each="goodsInfo,status:${list}">来执行循环操作,此外我们在HTML页面中要特别注意标签的成对出现,因为在解析器中这个核对要比之前的Jsp严格。对于HTML页面的传值我们要在相应的<form>中添加th:object属性,属性的值设置为要传入对象的类型即可,如<form action="init”th:object="UserBean" method="post">。除了传值,显示值得时候也与.jsp页面不同,我们是通过<span th:text="${userBean.userId}"><span>,即th:text来传值的。还有二者差别是在链接的传值时.jsp中是<a href="init?userId=${userBean.userId}">,而在对应的html中,我们是通过<a th:href="@{init3?(userId=${goodsInfo.userId})}" >,通过的是th:href属性值,在传值过程中用了@{},对应的传入值要用()。

        在HTML页面中显示汉字的时候要注意两个地方编码格式的改变,首先是上边标题的一个<meta>,另一个是页面的<meta>也要注意设置为可显示汉字的。有时候我们在页面输入相应的内容,但检索不出应有的内容,此时要注意输入值得全半角的问题,全角也会导致结果无法正确得出。如果显示一个页面的某行出错,我们首先要检查标签的完整性,其次是页面属性值以及其在对应的Bean中的set与get方法的正确与否。

 








转载于:https://my.oschina.net/u/2411765/blog/479531

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值