shiyan和Show3DHouse4项目的比较跟踪找错
1.使用了现成的可运行的项目的库,将项目下的.mymetadata .myhibernatedata .settings中修改路径名实现项目名修改,且确保了.jar文件的一致性,API库应该没问题。
2.配置文件web.xml:
? <filter-class>com.lma.tools.CharacterEncodingFilter</filter-class>
<init-param>
????? <param-name>config</param-name>
????? <param-value>/WEB-INF/struts-config.xml</param-value>
??? </init-param>
<servlet-mapping>
??? <servlet-name>action</servlet-name>
??? <url-pattern>*.do</url-pattern>
? </servlet-mapping>
? <welcome-file-list>
??? <welcome-file>index.jsp</welcome-file>
? </welcome-file-list>
<!--不用在此注册appicationContent.xml文件-->
?3. struts-config.xml文件中:
??? <form-bean name="userLoginForm" type="org.apache.struts.action.DynaActionForm">
????? <form-property name="loginPass" type="java.lang.String" />
????? <form-property name="type" type="java.lang.String" />
????? <form-property name="loginName" type="java.lang.String" />
????? <form-property name="newPass" type="java.lang.String"/>
????? <form-property name="comfirmPass" type="java.lang.String"/>
??? </form-bean>
<!--
有部分和action处理时对应也可:
String name = userLoginForm.getString("loginName");//////对于学生来说是学号
?? ??? ?String pass = userLoginForm.getString("loginPass");
?? ??? ?String type = userLoginForm.getString("type");
?? ??? ?而库中只有:id loginName loginPass type 持久类对应sql:? private Integer
id;
?? ?private String loginName;
?? ?private String loginPass;
?? ?private String type;
也就是所form-bean不严格要求和form 或sql持久类数量一致,但是在action中取值名称要一致。
-->
<action
????? attribute="searchHouseInfoForm"
????? input="/admin/admin_index.jsp" ?
????? name="searchHouseInfoForm"
????? path="/searchHouseInfo"? ?
????? scope="request"
????? parameter="method"
????? type="org.springframework.web.struts.DelegatingActionProxy">
????? <set-property property="cancellable" value="true" />
????? <forward name="searchHouseInfo2" path="/public/searchhouseinfo.jsp"></forward>
?? </action>
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
??? <set-property property="contextConfigLocation" value="/WEB-
INF/applicationContext.xml"/>
? </plug-in>
<!--plug-in元素指明了转向applicationContex.xml处理上述path属性请求。-->
4.声明了数据源:
<bean id="dataSource"
<property name="url"value="jdbc:mysql://localhost:3306/showhouse">
?? ??? ?</property>
<bean id="sessionFactory"
?? ?<property name="mappingResources">
?? ??? ??? ?<list>
?? ??? ??? ?<value>com/house/entity/HousingInfo.hbm.xml</value>
?? ??? ??? ?<!--? <value>com/house/entity/BuildingInfo.hbm.xml</value>
?? ??? ??? ??? ?<value>com/house/entity/HouseInfo.hbm.xm</value>
?? ??? ??? ??? ?<value>com/house/entity/ClientInfo.hbm.xm</value>
?? ??? ??? ??? ?<value>com/house/entity/Developers.hbm.xm</value>
?? ??? ??? ??? ?<value>com/house/entity/UserLogin.hbm.xm</value>
?? ??? ??? ??? ?<value>com/house/entity/Comment.hbm.xm</value>
?? ??? ??? ??? ?<value>com/house/entity/Reservation.hbm.xm</value>
?? ??? ??? ??? ?-->
?? ??? ??? ??? ?</list>
?? ??? ?</property>
<!--指明了所使用的hbm.xml,不需要hibernate.cfg.xml就可以处理好了。-->
?
5.在Action类中页面的跳转和相关属性、页面对象变量的使用:
public class SearchHousingInfoAction? extends DispatchAction{
???? IHouseInfoDao searchHouseInfoDao;
?? ?
?? ?public IHouseInfoDao getSearchHouseInfoDao() {
?? ??? ?return searchHouseInfoDao; //2.applicationContent.xml中指明的dao对象
?? ?}
?? public void setSearchHouseInfoDao(IHouseInfoDao searchHouseInfoDao) {
?? ??? ?this.searchHouseInfoDao = searchHouseInfoDao;
?? ?}
?????????????????????????? //1.jsp页面input 中声明的method名
? public ActionForward searchHouseInfo(ActionMapping mapping, ActionForm form,
//1.结合输入时的form表单处理
?? ??? ??? ?HttpServletRequest request, HttpServletResponse response){
?? ???????????????? //1.但却没有读取相关的form request数据,尽管可以传入,实现功能即可。
?? ??? ?List list = searchHouseInfoDao.findByAll();//3.使用了dao的方法
? request.setAttribute("houseInfo", list); //4.将其存入到houseInfo链表对象中,使输出页面读取
?? ??? ?return mapping.findForward("searchHouseInfo2");//4.返回到页面标志
?? ?}
}
6.在dao类中对应了相关的方法,和entity类声明以及.hbm.xml配置。
7.jsp input页面使用:
?<!--shiyan中: -->
<li> <ahref="http://jeromecen1021.blog.163.com/blog/../speciality.do?method=showSpeciality"><span>查看所有的专业
</span>查看专业</a></li>
<!--unity3dhouse中:-->
?<table> <tr><td> <ahref="http://jeromecen1021.blog.163.com/blog/../searchHouseInfo.do?method=searchHouseInfo">查看房子
</a></td></tr></table>
<!--
输出页面:是在返回的页面取链表变量houseInfo的数据成员对应于持久类:
???????? private Integer houseId;
?? ?private Integer buildingId;
?? ?private String floor;
?? ?private String sized;
?? ?private String price;
?? ?private String buildingArea;
?? ?private String usingArea;
页面中使用输出:-->
?? ?<logic:iterate id="houseInfo" name="houseInfo">
?? ??? ??? ??? ??? ?<tr>
<td bgcolor="#ffffff">${houseInfo.houseID}</td>
<td bgcolor="#ffffff">${houseInfo.floor}</td>
<td bgcolor="#ffffff">${houseInfo.sized}</td>
<td bgcolor="#ffffff">${houseInfo.price}</td>
<td bgcolor="#ffffff">${houseInfo.buildingArea}</td>
<td bgcolor="#ffffff">${houseInfo.usingArea}</td>
?? ??? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ??? ?</tr>
?? ??? ??? ??? ??? ?</logic:iterate>
8.hibernate.reveng.xml中定义的表与持久类的定义。
测试结果:
(1)更改了.jsp页面的*.do 的method方法和applicationContext中的method,因为tomcat服务器中默认了之前的method,应该是写入了初始的配置文件中。所以修改后重新启动,成功了!
(2)证明了form-bean是不一定要和申请表或持久类参数一致,但最后覆盖掉form参数。
(3)hibernate.reveng.xml文件是不重要的。