![](/img/trans.png)
[英]how to call method in action class in javascript using struts2 framework?
[英]How to call a method in Struts2 Action Class method with javascript
當字段值之一發生變化時,我們目前使用以下 javascript 提交表單。
var url = "project/location/myAction.action?name="+ lname ;
document.forms[0].action = url;
document.forms[0].submit();
它調用以下 Struts2 操作
<action name="myAction" class="project.location.NameAction">
<result name="success" type="tiles">myAction</result>
</action>
然后轉到 Action 類NameAction
的execute()
方法,在那里我必須檢查表單是否是從 javascript 提交的。
我更喜歡直接從 javascript 調用NameAction
中的NameAction
findName()
方法。 換句話說,我希望 javascript 像下面的 jsp 代碼一樣工作。
<s:submit method="findName" key="button.clear" cssClass="submit" >
有不同的方法來實現你想要的,但可能更簡單的是將不同的動作映射到同一動作類文件的不同方法,例如。 帶注釋:
public class NameAction {
@Action("myAction")
public String execute(){ ... }
@Action("myActionFindName")
public String findName(){ ... }
}
或使用 XML:
<action name="myAction" class="project.location.NameAction">
<result name="success" type="tiles">myAction</result>
</action>
<action name="myActionFindName" class="project.location.NameAction" method="findName">
<result name="success" type="tiles">myAction</result>
</action>
然后在javascript中:
var url = "project/location/myActionFindName.action?name="+ lname ;
您可以使用相同的操作類來映射使用method
屬性的不同方法
<action name="myAction" class="project.location.NameAction" method="findName">
默認情況下,如果省略method
屬性,則使用execute
方法。
這種方法需要更改操作名稱,因此需要更改 URL 來映射操作。 如果要為不同的操作保留相同的 URL,則應將方法名稱作為參數傳遞給操作。 然后在execute方法中解析這個參數為方法名並調用對應的方法。
當在以前的版本中啟用DMI來調用方法時,您可以使用s:submit
標記的method
屬性。 目前method:
parameter name 被params
攔截器阻止,即使它到達了動作映射器。
您還可以從如何從 struts2 中的參數列表中排除提交操作中閱讀其他可能性。
為了完整起見,我是如何實施 Andrea 和 Roman 的建議的。
當用戶在firstName
和lastName
字段中輸入數據時,我們會向他們顯示可供選擇的姓名列表,以填寫表單的其余部分。 該jsp是
<div class="row">
<div class=" col-sm-2 col-xs-12 no-padding-right text-right"><span class="required">*</span><label class="pull-right" for="lastNameId"><s:text name="lastName"></s:text>:</label></div>
<div class=" col-sm-2 col-xs-12 no-padding-right ">
<s:textfield name="lastName" id="lastNameId" maxlength="50" onchange ="dirtyFlag();" onblur="selectNameInfo(\'newRequest\');" class="form-control"/>
</div>
<div class=" col-sm-2 col-xs-12 no-padding-right text-right " ><span class="required">*</span><label class="pull-right" for="firstNameId"><s:text name="firstName"></s:text>:</label></div>
<div class=" col-sm-2 col-xs-12 no-padding-right ">
<s:textfield name="firstName" id="firstNameId" maxlength="50" onchange ="dirtyFlag();" onblur="selectNameInfo(\'newRequest\');" class="form-control"/>
</div>
</div>
javascript是
function selectNameInfo(formId) {
var lastName = document.forms[0].elements["lastNameId"].value;
var firstName = document.forms[0].elements["firstNameId"].value;
if(lastName != "" && firstName != ""){
clearDirtyFlag();
var oldAction = document.getElementById(formId).action;
var actionName = document.getElementById(formId).name;
var url = oldAction.replace(actionName,actionName+"_NameSearch");
document.forms[0].action = url;
document.forms[0].submit();
};
}
javascript 通過將“_NameSearch”添加到調用selectNameInfo()
函數的表單的action
中來形成一個 url。 在這種情況下,新操作是newRequest_NameSearch
,它轉到以下 xml,該 xml 調用操作類的generateNameList()
方法,而不使用 DMI,這是我最初的問題。
<action name="newRequest_NameSearch" class="gov.mo.dnr.egims.controller.evaluation.NewRequestAction" method = "generateNameList">
<result name="success" type="tiles">newRequest</result>
<result name="nameSearch" type="tiles">selectNameInfo</result>
<result name="error" type="tiles">error</result>
</action>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.