欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap FreeTalk
   您现在位于: 首页技术专栏开发语言 → 正文
用 Struts 实现动态单选按钮
07-10-13 09:58:31 作者:半块点心 出处:本站原创
p;       <!-- creates the radio button list -->
        <logic:iterate id="mountain" property="mountains" name="testForm">
            <%-- you need this hack to get the value of the mountains to the page --%>
            <bean:define id="mountainValue">
                           <bean:write name="mountain"/>
            </bean:define>
            <html:radio property="selectedMountain" 
                       value="<%=mountainValue%>" 
                       styleId="<%=mountainValue%>"/>
            <bean:write name="mountain"/><br/>
        </logic:iterate><br/>
        
        <html:submit/>      <html:reset/>
        <script type="text/javascript">
            <!--
          //Either of the following works.  
         //Uncomment the one you wish to try and comment the other out.
        //var selectedRadio = 
          document.getElementById("<bean:write //name="selectedRadio"/>");
      var selectedRadio = 
          document.forms["testForm"].elements["<bean:write name="selectedRadio"/>"];
           selectedRadio.checked=true; -->
        </script>
    </html:form>
    </body>
</html:html>
第 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/>
 
9 7 3 1 2 4 8 :

(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  

    关于我们友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
     
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.
     

                   滇ICP备05006901号