这是我的表格
<s:form action="changeStatus">
<s:div class="table">
<s:textfield name="custId" label="CUSTOMER ID" />
<s:textfield name="lifewardsCard" label="LIFE WARDS CARD NUMBER"
size="20" />
<s:textfield name="clientNo" label="CLIENT NUMBER" />
<s:textfield name="custName" label="CUSTOMER NAME" />
<s:textfield name="cardExpiryDate" label="CARD EXPIRY DATE(MMYYYY)" />
<s:select name="status" label="CARD STATUS"
list="#{'1':'Active', '2':'Inactive'}" />
<tr>
<td><s:submit value="search" theme="simple" /></td>
<td><s:submit value="save" theme="simple" /></td>
<td><s:submit type="button" theme="simple"
onclick="clear();return false;" value="clear" /></td>
</tr>
</s:div>
</s:form>
用户将输入字段custID并单击搜索按钮 我能够从数据库中获取值并在页面上显示它们 但我想要做的是在显示数据后,他可以编辑数据,并且应该能够通过单击保存按钮来保存数据。 这是我的xml配置
<action name="changeStatus" class="com.struts.lifewardscard.ChangeAction">
<result name="input">ChangeCardStatus.jsp</result>
<result name="success">ChangeCardStatus.jsp</result>
</action>
这是我的动作类
public class ChangeAction extends ActionSupport implements ModelDriven {
CardStatusForm cardSform=new CardStatusForm();
public String execute() throws Exception{
String clientId=null;
HttpServletRequest request = ServletActionContext.getRequest();
getCardHolderDetails();
return "success";
}
private void getCardHolderDetails() {
Connection c = null;
Boolean empty = true;
DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.S");
// Format date into output format
DateFormat outputFormat = new SimpleDateFormat("dd-MMM-yyyy");
try {
c = Conexion.getConnection();
CallableStatement cst = c
.prepareCall("{call P_GET_CARD_DETAIILS(?,?)}");
cst.setString(1, cardSform.getCustId());
cst.registerOutParameter(2, OracleTypes.CURSOR);
cst.executeUpdate();
ResultSet rs = (ResultSet) cst.getObject(2);
while (rs.next()) {
cardSform.setLifewardsCard(rs.getString(1));
cardSform.setClientNo(rs.getString(2));
if(rs.getString(3).equalsIgnoreCase("active"))
{
cardSform.setStatus(1);
}else
{
cardSform.setStatus(2);
}
cardSform.setCustName(rs.getString(4));
cardSform.setCardExpiryDate(rs.getString(5));
System.out.println(inputFormat.parse(rs.getString(6)));
empty = false;
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public Object getModel() {
// TODO Auto-generated method stub
return cardSform;
}
}
即使我可以编写一个可以在动作类中保存数据的方法,但我找不到一种方法来调用该方法而不调用另一个方法getCardHolderDetails()
。
答案 0 :(得分:2)
您应为您需要执行的每个逻辑操作定义操作。
可以驻留多个操作
ReadCardAction.java
,UpdateCardAction.java
等)或CardAction.java
与read()
和update()
)。如果您需要共享公共逻辑和辅助方法,则使用单个Java类非常方便,否则您可以利用继承来实现与单个文件相同的as described here。
要从单个表单中调用两个不同的操作,有三种方法:
使用action
属性:
<s:submit value="search" />
<s:submit value="save" action="saveStatus" />
这样, search 会调用表单的操作方法(changeStatus
),默认为execute()
,而 save 将调用saveStatus
操作,您将映射到update()
方法:
<action name="changeStatus" class="com.struts.lifewardscard.ChangeAction">
<result name="success">ChangeCardStatus.jsp</result>
<result name="input">ChangeCardStatus.jsp</result>
</action>
<action name="saveStatus" class="com.struts.lifewardscard.ChangeAction" method="update">
<result name="success">ChangeCardStatus.jsp</result>
<result name="input">ChangeCardStatus.jsp</result>
</action>
要在Struts2上执行此操作&gt; 2.3.15.2您需要在struts.xml as described here中激活操作前缀。
点击按钮,用Javascript更改表格的目标;
点击搜索时,指向changeStatus
,
,请指向saveStatus
。
Dynamic Method Invocation (DMI)。气馁,弃用, 不要在家尝试 。我只是为了完整性而包含它,因为你可以在阅读别人的遗留代码的同时进入它,然后说&#34; whut?&#34;。
答案 1 :(得分:2)
另一种方式
使用name
属性,按下的按钮将包含在请求中
<td><s:submit name="search" value="search" theme="simple" /></td>
<td><s:submit name="save" value="save" theme="simple" /></td>
执行方法
public String execute() throws Exception{
String clientId=null;
HttpServletRequest request = ServletActionContext.getRequest();
if (request.getParameter("search") != null) {
// search button pressed
....
} else if (request.getParameter("save") != null) {
// save button pressed
....
}
return "success";
}