3
  • 为什么我们在标签中需要一个value属性和一个fieldValue属性,而不像只有value属性?s:checkboxs:textfield

  • s:checkbox标签的属性是否允许“ true ”或“ falsefieldValue ”以外的字符串?在 Struts2 in Action (Manning) 中,它谈到了属性fieldValue

复选框将提交的实际值。也许是真的或假的

也就是说,如果我使用

<s:checkbox name="wantMoreChocolates" fieldValue="true"/>

那么wantMoreChocolate在java类中只能是布尔类型。在这种情况下,为什么文档将 fieldValue 的类型指定为 String 而不是 Boolean

  • 此外,关于价值属性,它说

与其他 UI 组件一样,value 属性指向组件绑定到的实际 Java 端属性,在本例中为布尔值。

如果通过“ value ”我们指定组件绑定的实际属性,那么name属性的作用是什么。既然 name 属性必须指向一个 Boolean 值,为什么它必须使用 value 属性将它绑定到另一个 boolean ?

  • 为什么不能仅根据name属性对应的属性进行预填充
4

4 回答 4

9

我想我可以谈谈这个,因为我在这个话题上挣扎了很多。

我们可以在官方文档中找到关于fieldValueof 的内容<s:checkbox>

Name           fieldValue
Required       FALSE
Default        TRUE
Evaluated      FALSE
Description    The actual HTML value attribute of the checkbox.

但它什么也没说。我建议将其更改为:

有了fieldValue,我们可以将类型值提交String到动作类中。

它的意思是:

  • 当字符串字面意思是"true"or "false",并且 action 类中的变量是booleantype 时,字符串会被自动解析为 boolean 值,存储在booleantype 变量中。
  • 如果我们根本不定义fieldValue,则字符串类型的默认值"true"总是提交给变量,如果在Action类中有定义来保存它。

请注意,如果我们已fieldValue设置,但未选中复选框,则不会将任何内容发送到后端,这意味着String接收复选框值的类型字段将为null.

但是,它可以做的还不止这些。<s:checkbox />让我们看一个结合Struts 2 Action 类字段的命名规则的真实示例。

想象一下,我有一个复选框列表,例如,要选择一个用户列表,每个复选框都包含idUser要处理的复选框。现在,如果我想解析多个idUser来完成我的任务,我可以定义:

<s:iterator value="listUsers">
    <s:checkbox name="userId" id="userId" fieldValue="%{idUser}"
    ....
</s:iterator>

现在我们将在我的动作类中收到一个数字列表,但具有相同的name. 然后我们定义一个类型的字段List<String>或一个数组来接收所有这些用户的 ID:

private List<String> userId;

用它的getter/setter。然后我们可以用这个列表做我们想做的事。请记住,如果我们想用它们进行计算,这些数字必须被解析为 Integer/Long/Whatever you like。

此外,如果我们想在一个复选框中提交“YES/NO”或“1/0”,或“radiant/dire”(你可以命名它,现在你知道我玩什么游戏了),我们可以放一个简单的 JavaScript 函数在onchange这个复选框的情况下监控它的状态,或者更简单地说,在动作类中解析它的值。

如果我们有:

<s:checkbox id="myCamp" name="myCamp" fieldValue="radiant"></s:checkbox>

在行动课上,我们必须:

String myCampString = null;
if (StringUtils.isBlank(myCamp)){  //myCamp = null, means I am in Dire.
    myCampString = "dire";
} else if (myCamp.equalsIgnoreCase("radiant")){ //myCamp = "radiant", means I am in Radiant.
    myCampString = "radiant";
}
// then we process myCampString, now it cannot be null.

******************************我是中江****************** *************

至于value="true"/"false",我认为这是一个很好的例子,我们程序员无法正确命名事物并认为每个人都可以理解我们在说什么:)。它可以有一些更清晰的名称,例如preselected/selectByDefault等。

同样,参考 Struts 2 DOC,我们有:

Name         value
Required     FALSE
Default  
Evaluated    FALSE
Type         String
Description  Preset the value of input element.

实际上,如果我们输入以下内容会更好:

value<s:checkbox>定义第一次渲染时是否应选中此复选框。(*)

(*) 请注意,如果value在页面加载完成后发生更改,Struts 2 将不会填充该值<s:checkbox />来更改其状态。JavaScript 函数负责这部分,例如 AngularJS。

例如,如果我想User用表单创建一个新用户,并且默认情况下每个用户都active在创建它时,我们可以这样写:

    <s:checkbox name="isActive" id="isActive" value="true"></s:checkbox>

但是,当在编辑用户的形式中,我们想让它在用户活跃时被检查,而不是在用户不活跃时被检查,我们可以这样做:

<s:checkbox name="isActive" id="isActive" value="%{user.isActive}"

所以这是一些使它更容易理解的提示,尽管 DOC 已经明确了(我认为是以作者的方式)。

于 2016-03-04T11:47:29.497 回答
1

简而言之fieldValue就是复选框的实际HTML值属性,将由复选框提交。一般我们不需要设置这个值,因为默认情况下这是真的。

另一方面value参数将用于预设输入元素的值。请通过 Struts2 表单标签文档了解其工作原理

于 2012-04-05T11:54:46.320 回答
0

查找复选框的“键”属性。这可能就是您所需要的。如果您不想使用“key”属性,请继续阅读。

我发现使用“值”属性会带来更好的运气。我自己对“fieldValue”有点困惑。我已经看到“fieldValue”可用于显示当前值,但如果您没有“value”属性,则该值(在表单上更改后)不会发送到操作方法。

于 2014-02-27T19:55:40.927 回答
0

fieldValue是复选框将提交的复选框的值属性。

fieldValue可以是Stringboolean(真/假)等,具体取决于您的要求。

有关更多信息,请查看此链接http://www.mkyong.com/struts2/struts-2-scheckbox-checkbox-example/

于 2015-11-10T03:39:44.597 回答