第 4 步. 创建显示页面
显示页面基本与复选框诀窍中使用的页面相同,区别只是不需要迭代,因为只选中了一个值。需要做的只是列出 bean 中选中的 mountain,如清单 4 所示:
清单 4. 显示页面的 JSP
<%@taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
<%@taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>
<%@taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic"%>
<%-- html code, etc... --%>
<bean:write name="mountain"/><br/>
<hr size=5 color="black"/>
<%-- some more html code, etc... --%>
第 5 步. 编写 Action 类
正像我在 前一篇文章 提到过的,Action 类比起这个诀窍中的其他组件来说,做的工作并不多。在这里要做的仅仅是得到 String 数组和 selectedMountain 的值,并让显示页面能够使用它们。
清单 5. Action 类
ipackage com.strutsrecipes;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* The Action for the Radio Button test
*/
public final class RadioTestAction extends Action {
// -------------------------- OTHER METHODS --------------------------
/**
* The Action for the Radio Button test
*/
public ActionForward execute(ActionMapping mapping,
ActionForm form, HttpServletRequest request, HttpServletResponse response
)
throws ServletException, Exception {
// Extract attributes needed
String selectedMountains = ((RadioTestForm) form).getSelectedMountain();
System.out.println("htmlString RETURNED*********\n" + selectedMountains);
//Save your htmlString in the session
HttpSession session = request.getSession();
session.setAttribute(Constants.MOUNTAINS, selectedMountains);
return (mapping.findForward("success"));
}
}
诀窍内部
诀窍背后真正起作用的是 JavaScript。首先,我在清单 5 中,为 JSP 表单内的 selectedMountain 字段定义了一个 JSP 脚本变量,如下所示:
<bean:define id="selectedRadio" property="selectedMountains" name="testForm"/>
在表单下面,我创建了一个 JavaScript 函数,包含以下两行:
var selRadio = document.getElementById("<bean:write name="selectedRadio"/>");
selRadio.checked=true;
在客户端脚本内部,我创建了 selRadio JavaScript 变量然后对文档内的所有元素进行查找(find),查找 id (或者预编译代码中的 styleId)与 selectedRadio 变量匹配的元素。我通过把 <html:radio/> 标记的 styleId 属性设置成与它的名称/值匹配来做到这点。在 JavaScript 函数迅速地在页面上的 ID 之间迭代的时候,只是把单一单选按钮设置为 selected。
替代方法
用如下所示的 JavaScript 方法也能产生同样效果:
var selectedRadio =
document.forms["testForm"].elements["<bean:writename="selectedRadio"/>"];
selectedRadio.checked=true;
这个脚本只区分表单元素的 name 属性而不是 id 属性。两种实现都可以工作,所以具体选择哪一种取决于个人需要和偏好。JSP 表单页面的实际输出看起来像清单 6:
清单 6. JSP 表单页面的输出
<input type="radio" name="selectedMountain" value="Everest" id="Everest"/>
Everest<br/>
<input type="radio" name="selectedMountain" value="K2" id="K2"/>
K2<br/>
<input type="radio" name="selectedMountain"
value="Kangchenjunga" checked="checked" id="Kangchenjunga"/>
Kangchenjunga<br/>
<input type="radio" name="selectedMountain" value="Lhotse" id="Lhotse"/>
Lhotse<br/>
<input type="radio" name="selectedMountain" value="Makalu" id="Makalu"/>
Makalu<br/>
<input type="radio" name="selectedMountain" value="Cho Oyu" id="Cho Oyu"/>
Cho Oyu<br/>
|