入門 10 - Map-backed ActionForm

本文介绍如何在Struts1.1框架中使用Map-backedActionForm来处理动态生成表单内容的情况。文章详细展示了UserForm类的设计,通过Map存储表单字段值,并介绍了如何在Action类中获取这些值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

入門 10 - Map-backed ActionForm
参考:[url]http://www.jajakarta.org/struts/struts1.2/documentation/ja/target/userGuide/building_controller.html[/url]
原文:[url]http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=502[/url]
有的時候您的表單內容可能是由程式動態產生的,這時候表單上的欄位與參數我們事先並無法得知,因而無法事先決定好ActionForm的屬性,在Struts 1.1中,您可以使用Map-backed ActionForm,這樣的ActionForm使用Map來儲存表單的欄位值,一個例子如下:

UserForm.java
package onlyfun.caterpillar;

import java.util.*;
import javax.servlet.http.*;
import org.apache.struts.action.*;

public class UserForm extends ActionForm {
protected Map map = new HashMap();

public void setValue(String key, Object value) {
map.put(key, value);
}

public Object getValue(String key) {
return map.get(key);
}

public Map getMap() {
return map;
}

public void reset(ActionMapping mapping, HttpServletRequest req) {
map.clear();
}
} 在Action類別中,您可以如下面的方式來取值:

LoginAction.java
package onlyfun.caterpillar;

import javax.servlet.http.*;
import org.apache.struts.action.*;

public class LoginAction extends Action {
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
UserForm userForm = (UserForm) form;
String name = (String) userForm.getValue("name");
String password = (String) userForm.getValue("password");

if(name.equals("caterpillar") && password.equals("1234")) {
request.setAttribute("valid_user", form);
return mapping.findForward("greeting");
}

return mapping.findForward("welcome");
}
} 為了要能夠設定值給這個ActionForm,在表單上,您要使用name="value(key)"來設定欄位名稱,例如:

<html:form action="/LoginAction" focus="name">
名稱:<html:text property="value(name)" size="20"/><br>
密碼:<html:password property="value(password)" size="20"/><br>
<html:submit/> <html:reset/>
</html:form> 同樣的,如果要使用<bean:write>標籤來寫出ActionForm的值,我們也要使用value(key)的方法來取值,例如:

<logic:present scope="request" name="valid_user">
<bean:write name="valid_user" property="value(name)"/>您好,這是您的神秘禮物!
</logic:present> 在我們的ActionForm中,我們提供了getMap()方法,這樣作可以方便透過EL來取值,例如:

${valid_user.map.name}
${valid_user.map.password}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值