【问题标题】:How to use XML validation for checkboxlist and select in Struts 2 on JSP?如何在 JSP 上的 Struts 2 中对复选框列表使用 XML 验证和选择?
【发布时间】:2015-10-02 11:32:03
【问题描述】:

这是我的 jsp 文件:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Company Data</title>
</head>
<body>
<center><h3>Company Data</h3></center>
<s:form action="companyData" validate="true">
    <s:textfield label="Name" key="companyName" />
    <s:textfield label="ISIN" key="companyISIN" />
    <s:checkboxlist list="exchangesList" label="Exchange" name="exchange" />
    <s:select list="sectorsList" label="Sector" name="sector" />
    <s:checkboxlist list="shareholdersList" label="Shareholders" name="shareholders" />
    <s:submit />
</s:form>
</body>
</html>

这里,shareholdersListArrayList&lt;String&gt;shareholdersString

这是我的动作验证文件:

<!DOCTYPE validators PUBLIC 
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
<field name="companyName">
    <field-validator type="required">
        <message>You must enter some name for companyName</message>
    </field-validator>
</field>

<field name="companyISIN">
    <field-validator type="required">
        <message>You must enter some id for companyISIN</message>
    </field-validator>
</field>

<field name="exchange">
    <field-validator type="fieldexpression">
        <param name="expression">
            <![CDATA[ isDoNotCheck() ? true : (exchange != null && !exchange.isEmpty()) ]]>
            <!-- OR -->
            <!-- isDoNotCheck() ? true : !object.field.isEmpty() -->
        </param>
        <message>You must check some checkboxes for exchange</message>
    </field-validator>
</field>

<field name="shareholders">
    <field-validator type="fieldexpression">
        <message>You must check some checkboxes for shareholders</message>
    </field-validator>
</field>      
</validators>

这是提交表单的截图:

文本框的验证工作正常,但复选框列表根本不工作。我想要复选框列表验证,以便用户必须从列表中选择至少一个复选框。应该如何更正代码?

另外,我有一个类似的选择列表,而不是其他一些 jsp 中的复选框列表,那么如何也验证该列表。我在互联网上找到了很多东西,但到目前为止没有任何效果。

【问题讨论】:

  • 切换到开发者模式查看更多异常,如果有异常解析表达式请贴到问题中。
  • 您使用的是哪个版本的 S2?你确定shareholdersexchange 是String-s 并且有正确的getter/setter 吗?
  • 2.3.24。是的。它们背后的逻辑运行得非常好。只是验证造成了问题。

标签: java forms validation jsp struts2


【解决方案1】:

试试下面的代码:

<field name="exchange">
    <field-validator type="fieldexpression">
        <param name="expression">exchange.length() > 0</param>
        <message><![CDATA[ You must check some checkboxes for exchange ]]></message>
    </field-validator>
</field>

<field name="shareholders">
    <field-validator type="fieldexpression">
        <param name="expression">shareholders.length() > 0</param>
        <message><![CDATA[ You must check some checkboxes for shareholders ]]></message>
    </field-validator>
</field>      

如果可行,请开始添加您的自定义条件 (isDoNotCheck()...)。

否则,请使用肯定有效的非字段验证器:

<validator type="fieldexpression">
    <param name="fieldname">exchange</param>
    <param name="expression"><![CDATA[exchange.length() > 0]]></param>
    <message><![CDATA[ You must check some checkboxes for exchange ]]></message>
</validator>

<validator type="fieldexpression">
    <param name="fieldname">shareholders</param>
    <param name="expression"><![CDATA[shareholders.length() > 0]]></param>
    <message><![CDATA[ You must check some checkboxes for shareholders ]]></message>
</validator>

【讨论】:

  • 这两件事都不起作用。在提交复选框的空表单时,不会在表单或控制台上打印任何内容。
  • 我只使用默认拦截器堆栈,因为我是 Struts 2 的初学者。
  • 真的很奇怪。重新检查所有内容是否存在拼写错误、缺少 getter/setter 等...也尝试添加一些日志
  • 请帮我检查 XML 文件。这是链接:pastebin.com/7hbmaiFM
  • 使用 1.0.3 而不是 1.0.2,使用 requiredstring validator 作为字符串字段,而不是 required...基本上唯一应该工作的事情是那些不工作的 :D 尝试这两个更改,如果它仍然不起作用,请尝试使用非字段验证器,我的第二个示例。如果它仍然不起作用,请编辑您的问题,准确描述您尝试过的内容和得到的结果,然后发布您的 struts.xml 和 web.xml。祝你好运;)
【解决方案2】:

使用如下代码。checkbox List的值存储为字符串。因此,可以使用requiredstring。

  <field name="exchange">
    <field-validator type="requiredstring">
       <message>Please select exchange type</message>
    </field-validator>
  </field>

 <field name="shareholders">
   <field-validator type="requiredstring">
      <message>Please select shareholders</message>
   </field-validator>
 </field>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    相关资源
    最近更新 更多