这两天做项目的时候一直被一个问题所困扰,在项目中新增了一个功能模块,实现一个新功能,首先配置了function.xml文件,在function文件中加入了这个模块;然后在web-service.xml中配置了osgi和bean,根据相似的模板进行配置;接着在项目中新建3个文件,分别是*****_index.vm、*****.java、****.js(其中vm文件下划线前面的文件名必须要与java文件的名字大小写相同,js文件名大小写无所谓)。相关文件内容完成之后,运行程序,发现整个程序始终报错缺少某个模块,就是新增了一个小模块,最终运行的结果是整个大模块都无法显示。两天内一直在调试,起初以为是没有编译完成,多次编译发现还是不行,然后再次检查配置文件,发现配置文件中的各项内容均无错误,但是仍然无法显示模块,多方搜索也没解决,最后无奈求助大佬,在大佬的帮助下,发现了问题根本所在。原本配置的web-service.xml文件中bean的是这样的:
<bean id="com.bop.web.gbgl.hbgb.hbgbdzcx" class="com.bop.web.gbgl.hbgb.HBGBDZCX">
<property name="rsglDAO" ref ="RSGLDaoService"/>
<property name="jdbcOperations" ref="JdbcTemplate" />
<property name="userSession" ref="UserSession"></property>
</bean>
然后对应的java文件为:
public class HBGBDZCX {
private JdbcOperations jdbcOperations;
private UserSession userSession;
private RSGLDaoService rsglDAO;
public JdbcOperations getJdbcOperations() {
return jdbcOperations;
}
public void setJdbcOperations(JdbcOperations jdbcOperations) {
this.jdbcOperations = jdbcOperations;
}
public UserSession getUserSession() {
return userSession;
}
public void setUserSession(UserSession userSession) {
this.userSession = userSession;
}
public Renderer index() {
Map<String, Object> map = new HashMap<String, Object>();
return new TemplateRenderer(this.getClass(), "index", map); //返回index.vm界面
}
}
上述文件中定义了RSGLDaoService rsglDAO,但是下面的java文件中没有定义它的方法,虽然java文件中没有报错,但是整个项目会报错。正确代码如下所示:
public class HBGBDZCX {
private JdbcOperations jdbcOperations;
private UserSession userSession;
private RSGLDaoService rsglDAO;
public RSGLDaoService getRsglDAO() {
return rsglDAO;
}
public void setRsglDAO(RSGLDaoService rsglDAO) {
this.rsglDAO = rsglDAO;
}
public JdbcOperations getJdbcOperations() {
return jdbcOperations;
}
public void setJdbcOperations(JdbcOperations jdbcOperations) {
this.jdbcOperations = jdbcOperations;
}
public UserSession getUserSession() {
return userSession;
}
public void setUserSession(UserSession userSession) {
this.userSession = userSession;
}
public Renderer index() {
Map<String, Object> map = new HashMap<String, Object>();
return new TemplateRenderer(this.getClass(), "index", map); //返回index.vm界面
}
}
上述代码为完整正确代码,可以完全显示内容,原因是在web-service.xml中配置了rsglDAO
<property name="rsglDAO" ref ="RSGLDaoService"/>
如果在java文件中没有定义变量和方法的话那么始终会报错。
从上面可以看出来,只要xml文件中定义引用过的,那么java文件中必须要定义使用它的方法,否则会报错。所以当出现某个模块加载不出来的时候要检查xml文件中定义的在java文件是不是都有实现。
未完待续。。。。。