Board logo

标题: 用 Struts 实现动态单选按钮 [打印本页]

作者: look_w    时间: 2018-7-16 11:41     标题: 用 Struts 实现动态单选按钮

五步诀窍为了简单起见,我用与上次在动态复选框中使用的相同工作示例来演示单选按钮。我的简单的用户界面使用单选按钮元素来显示喜玛拉雅山顶峰高度的 String[] 数组,第二个 selectedMountain String 数组代表选中的单选按钮。在创建了按钮之后,调用一个 JavaScript 函数对单选按钮进行预选。
根据喜玛拉雅这个示例,用 Struts 创建动态选择的单选按钮的诀窍包含五个部分:
单选按钮诀窍和上次学的动态复选框诀窍的主要区别是:Struts 没有提供自动创建 selected 值的工具,而这通常是创建动态单选按钮所需要的。虽然用内置在 Struts JSP 标记中的功能预先选中 checkbox 和  select 输入类型相当简单,但是 radio button 输入类型要求不同的解决方案。幸运的是,使用来自表单 bean 的信息和几行 JavaScript 代码就可以实现这个要求,如第 3 步所示。
第 1 步. 创建数据层我做好了一个假的数据类,将来自业务层的数据呈现到应用程序视图层,视图层是我要考虑的事。名为 FakeData 的类包含两个静态方法,如清单 1 所示:
清单 1. FakeData.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* class FakeData -- represents the business logic
*/
public class FakeData {
    /**
     * data for mountains
     */
    public static final String[] MOUNTAINS =
      {"Everest", "K2", "Kangchenjunga",
      "Lhotse", "Makalu", "Cho Oyu"};
    /**
     * data for selected mountain
     */
    public static final String SELECTED_MOUNTAIN = "Kangchenjunga";
}




创建假的数据层是一种有用的用户界面开发实践,因为最终应用程序要使用的持续存储层对于前端开发人员来说,通常是看不到的。所以没有必要等待后台团队把工作完成,可以方便地开发一个假的数据层来模拟最终要发送过来的 API 和功能。使用假数据层,可以进行用户界面开发并降低对其他团队的依赖。有了假数据层,还可以定义到项目其他部分的 API 连接,并确保在集成所有部分的时候问题较少。
第 2 步. 创建表单 bean最终要填充应用程序的值可能来自比清单 1 所示的框架复杂得多的框架。对于更漂亮的示例,有一个好消息,就是清单 2 中的表单  bean 不必做任何繁重的工作,所以它只是一个带有 getter 和 setter 方法的简单 Java™ 对象。实际的值是在调用构造函数时插入的。
清单 2. RadioTestForm.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package com.strutsrecipes;
import org.apache.struts.action.ActionForm;
/**
* Radio Button Test Form to show an array of radio buttons and
*/
public class RadioTestForm extends ActionForm {
// ------------------------------ FIELDS ------------------------------
    /**
     * The selected Mountain
     */
    private String selectedMountain;
    /**
     * The list of mountains for the radio button
     */
    private String[] mountains;
// --------------------------- CONSTRUCTORS ---------------------------
    /**
     * Constructor -- using FakeData...
     */
    public RadioTestForm() {
        this.selectedMountain = FakeData.SELECTED_MOUNTAIN;
        this.mountains = FakeData.MOUNTAINS;
    }
// --------------------- GETTER / SETTER METHODS ---------------------
    /**
     * Getter for the mountains
     *
     * @return the mountains array
     */
    public String[] getMountains() {
        return this.mountains;
    }
    /**
     * Setter for the mountains
     *
     * @param m the Mountains array
     */
    public void setMountains(String[] m) {
        this.mountains = m;
    }
    /**
     * Getter for selectedMountain
     *
     * @return the selected mountain
     */
    public String getSelectedMountain() {
        return this.selectedMountain;
    }
    /**
     * Setter for selectedMountain
     *
     * @param sm the selectedMountain
     */
    public void setSelectedMountain(String sm) {
        this.selectedMountain = sm;
    }
}




为了清晰起见,我包含了表单 bean 的所有 Java 代码。注意,Kangchenjunga 同时列出在 selectedMountain 和 mountains 字段中,在构造函数中实例化,并用 FakeData 类来填充。现在,我已经有了足够的信息,可以把 Kangchenjunga 传递到 JSP,作为 preselected 的初始值。








欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0