技术开发 频道

Struts 的动态复选框


IT168技术文档】 
    扩充 Himalayas

    有了这个代码,工作就完成了,差不多可以展示成果了!用户现在可以提交 JSP 表单并在 Action 类引用的对应页面中查看结果。清单 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... --> <logic:iterate id="mountain" property="mountains" name="testForm"> <bean:write name="mountain"/><br/> </logic:iterate> <hr size=5 color="black"/> <%-- some more html code, etc... -->
    这个诀窍的工作方式 

    这个诀窍的关键是表单 bean 中的字段被传递到页面。查看相关 JSP 代码有助于澄清这点。一旦表单 bean 被实例化:
<html:form action="/FormAction" name="testForm" type=" com.strutsrecipes.CheckboxTestForm">
     下一步为 Java 类的 mountains 变量中的每个 mountain 创建一个复选框。要做到这一点,我必须像下面这样在 String[] 数组中迭代:
<logic:iterate id="mountain" property="mountains" name="testForm">
    使用 <logic:iterate> 标记,我调用了 testForm bean 中的 getMountains() 方法。它在这个数组中迭代,并把每个值作为已经命名的 pageContext() 级的 String mountain[] 数组变量返回(即 id="mountain")。 

    在这里可以看到 <html:multibox/> 标记的效果以及如何显示它:
<html:multibox property="selectedMountains"> <bean:write name="mountain"/> </html:multibox> <bean:write name="mountain"/><br/>
    注意 property 属性被 selectedMountains 填充,这是我选中的变量。当这个变量与 <html:multibox/> 值(即 multibox 标记中的 <bean:write/>)对应时,在呈现表单的时候它就表现为选中。如果用户选中表单或取消选中,那么新的 selectedMountains 值就被发送给 Action 类进行处理。这个迭代中的第二个 <bean:write/> 标记创建该标记使用的标签,后面跟着 <br/> 标记,让视图在一长列中显示这些标记。
扩展这个诀窍 

    通过使用 Struts LabelValueBean 类代替简单的 String[] 数组,可以对动态复选框这个诀窍进行扩展,从而为复选框创建不同的标签。先从添加 LabelValueBeans 到 java.util.List 开始。然后对列表进行迭代,把 LabelValueBeans 标签和值释放到适当的位置。这个略微复杂的诀窍与动态复选框诀窍的效果相同,但是它的结果更适合实际的用户界面设计。清单 5 显示了扩展的动态复选框诀窍:
<logic:iterate id="mountainlb" property="mountainslb" name="testForm"> <bean:define id="mountainbean" name="mountainlb "type="org.apache.struts.util.LabelValueBean"/> <html:multibox property="selectedMountains"> <bean:write name="mountainbean" property="value"/> </html:multibox> <bean:write name="mountainbean" property="label"/><br/> </logic:iterate>
    注意,这里大的变化是用 <bean:define/> 在迭代的时候创建 LabelValueBean。然后用 <bean:write/> 输出每个 mountainbean 的属性(即 org.apache.struts.util.LabelValueBean 类的 getLabel() 和 getValue() 方法)。 
    
    结束语 

    Struts 对于复选框的动态呈现和预选提供了优秀的支持。这个诀窍是我合著 Struts Recipes 的原因 —— 那时我已经发现许多与 Struts 框架相关的理论和服务器端信息,但是用户界面编程多数被忽略了,或者被掩盖了。在上上下下找了一圈使用 Struts 创建复选框的诀窍之后,我放弃了,并自己写了一个。通过把不同的部分组合起来,我可以创建适合我的动态复选框系统。 

    您会注意到,代码示例被设置为适合用作不同用户界面小控件和布局想法的测试温床。实际上,我在书中的大多数用户界面示例中都使用了它,只需要调整 Action 类和我的模型去适合诀窍的需求而已。我还把它用在测试不同的想法上,这样就不用在我正在处理的应用程序内部花太多时间为某些东西编码了。
0
相关文章