Dau*_*aud 2 java checkbox struts struts2
为什么我们需要一个value属性以及tag中的fieldValue属性s:checkbox
,不像s:textfield
只有value属性?
s:checkbox
标签的fieldValue
属性是否允许" true "或" false " 以外的字符串?在Struts2 in Action(Manning)中,它描述了fieldValue
属性
复选框将提交的实际值.也许是真是假
也就是说,如果我使用
<s:checkbox name="wantMoreChocolates" fieldValue="true"/>
那么wantMoreChocolate只能是java类中的布尔类型.在这种情况下,为什么文档将fieldValue的类型指定为String而不是Boolean?
与其他UI组件一样,value属性指向组件绑定到的实际Java端属性,在本例中为布尔值.
如果通过" value "我们指定组件绑定到的实际属性,那么name属性的作用是什么.因为name属性必须指向一个布尔值,为什么它必须使用value属性将它绑定到另一个布尔值?
我想我可以对此有所了解,因为我在这个话题上遇到了很多困难.
我们在官方文档中可以找到的内容fieldValue
是<s:checkbox>
:
Run Code Online (Sandbox Code Playgroud)Name fieldValue Required FALSE Default TRUE Evaluated FALSE Description The actual HTML value attribute of the checkbox.
但它没有说什么.我建议把它改成:
有了
fieldValue
,我们可以将一个String
类型值提交到动作类中.
它的意思是:
"true"
或者"false"
,并且动作类中的变量是boolean
类型时,字符串将自动解析为布尔值以存储在boolean
类型变量中.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>
Run Code Online (Sandbox Code Playgroud)
现在我们将在动作类中收到一个数字列表,但是相同name
.然后我们定义一个类型List<String>
或数组的字段来接收用户的所有这些ID:
private List<String> userId;
Run Code Online (Sandbox Code Playgroud)
用它的吸气剂/二传手.然后我们可以用这个列表做我们想做的事情.请记住,如果我们想用它们进行计算,必须将这些数字解析为Integer/Long /无论你喜欢什么.
此外,如果我们想在一个复选框中提交"YES/NO"或"1/0"或"radiant/dire"(你给它命名,现在你知道我玩的是什么游戏),我们可以放一个简单的JavaScript函数在onchange
此复选框的事件来监视其状态,或者更简单地说,分析它的动作类值.
如果我们有:
<s:checkbox id="myCamp" name="myCamp" fieldValue="radiant"></s:checkbox>
Run Code Online (Sandbox Code Playgroud)
在行动课中,我们必须:
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.
Run Code Online (Sandbox Code Playgroud)
***************************我是中间河*******************************
至于value="true"/"false"
,我认为这是一个很好的例子,我们程序员不能正确地命名并认为每个人都能理解我们在谈论的内容:).它可以有一些更明确的名称,如preselected
/ selectByDefault
等.
再次,重新启动Struts 2 DOC,我们有:
Run Code Online (Sandbox Code Playgroud)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>
Run Code Online (Sandbox Code Playgroud)
但是,当以编辑用户的形式,我们希望在用户处于活动状态时进行检查,并且在未处于活动状态时不进行检查,我们可以这样做:
<s:checkbox name="isActive" id="isActive" value="%{user.isActive}"
Run Code Online (Sandbox Code Playgroud)
所以这是一些让它更容易理解的技巧,尽管DOC已经明确了(我认为这是作者的方式).