<input type="button" value="提交" onclick="javascript:callTest">
點擊按鈕無反應,Java 方法未被調用。
onclick="javascript:callTest" 中 callTest 是**函數引用**,而非**函數調用**。瀏覽器不會執行函數體,只會評估表達式並丟棄結果。
<input type="button" value="提交" onclick="callTest()">
<input type="button" value="提交" onclick="javascript:callTest()">
**必須加括號 () 觸發調用**。
| 項目 | 正確示例 | 常見錯誤 |
|---|---|---|
dwr.xml <create> | javascript="TestUtil" (JS 對象名) | 類名/方法名拼寫錯、<include method="*"> 未包含目標方法 |
| Java 類 | public class TestUtil { public String test(String p) { return p; } } | 方法非 public、參數類型不匹配、拋出未檢查異常 |
| JS 調用 | TestUtil.test("abc", callback); | 回調函數簽名錯誤 function callback(data) |
| web.xml | <servlet><servlet-name>dwr-invoker</servlet-name><servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class></servlet> | 映射路徑 /dwr/* 與 JS 引入 /dwr/engine.js 不一致 |
https://host:port/app/dwr/index.html 查看 DWR 自動生成的 JS 接口文檔,確認方法暴露正常。/dwr/call/plaincall/TestUtil.test.dwr 請求/響應。一個括號之差,導致整條調用鏈斷裂。**JS 事件屬性中調用函數必須加 ()**,這是前端入門必記語法。