專案經驗第一課——細節決定成敗
阿新 • • 發佈:2019-01-09
這兩天做專案的時候一直被一個問題所困擾,在專案中新增了一個功能模組,實現一個新功能,首先配置了function.xml檔案,在function檔案中加入了這個模組;然後在web-service.xml中配置了osgi和bean,根據相似的模板進行配置;接著在專案中新建3個檔案,分別是*****_index.vm、*****.java、****.js(其中vm檔案下劃線前面的檔名必須要與java檔案的名字大小寫相同,js檔名大小寫無所謂)。相關檔案內容完成之後,執行程式,發現整個程式始終報錯缺少某個模組,就是新增了一個小模組,最終執行的結果是整個大模組都無法顯示。兩天內一直在除錯,起初以為是沒有編譯完成,多次編譯發現還是不行,然後再次檢查配置檔案,發現配置檔案中的各項內容均無錯誤,但是仍然無法顯示模組,多方搜尋也沒解決,最後無奈求助大佬,在大佬的幫助下,發現了問題根本所在。原本配置的
<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檔案是不是都有實現。
未完待續。。。。。