1. 程式人生 > >專案經驗第一課——細節決定成敗

專案經驗第一課——細節決定成敗

這兩天做專案的時候一直被一個問題所困擾,在專案中新增了一個功能模組,實現一個新功能,首先配置了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檔案是不是都有實現。

未完待續。。。。。