![](/img/trans.png)
[英]How to use struts2 submit tag as button without submitting the form?
[英]How to use Struts 2 push tag for form input fields?
我有两个类,一个是 Action 类MyAction
,另一个是 POJO 类User
。 在MyAction
,我为User
类制作了 getter-setter。
然后我有用于用户输入的index.jsp
页面。 在此,我对存储在User
类中的属性使用 struts 2 push
标签。 它看起来像这样:
<s:form action="go" method="post">
<s:push value="user">
<s:textfield name="id" label="usr-id"/> <!-- user.id -->
<s:textfield name="fname" label="first-name"/> <!-- user.fname -->
</s:push>
<s:submit/>
<s:token/>
</s:form>
但我收到一个错误。 如果我删除 push 标签并在User
属性前面加上user
,那么它运行良好。 任何人都可以指导我,我错在哪里以及如何在表单中的输入字段中使用push
标签。
无论您是否使用<s:push>
、 <s:set/>
、 <s:iterator>
及其var
或IteratorStatus
属性...:
name
属性中指定完整的“路径”。 例如,你可以在value属性中使用pushed对象,但是为了在提交时生效,你仍然需要将user
放在name属性中:
<s:push value="user">
<s:textfield name="user.id" value="id" /> <!-- user.id -->
<s:textfield name="user.fname" value="fname"/> <!-- user.fname -->
</s:push>
这使得在您的情况下使用<s:push>
完全无用。
但是在源和目标不同的用例中,例如。 您从 ActionSource 读取user.fname
,并将其值以selectedFname
字符串发送到 ActionDestination,jsp 将是
<s:push value="user">
<s:textfield name="selectedId" value="id" /> <!-- user.id -->
<s:textfield name="selectedFname" value="fname"/> <!-- user.fname -->
</s:push>
所以它会做一些“有用的事情” 。
但是根据我的经验,您几乎不会永远不会使用推送。 如果你需要它,你的数据结构可能太复杂了。
您的代码看起来不错,但是要从文本字段发送值,您需要再次将user
对象推送到堆栈。 最好在params
拦截器填充动作之前使用一些拦截器。 同样的事情是做modelDriven
拦截器。
Model-Driven 拦截器
ModelDriven
操作并将操作的模型添加到值堆栈的top
。注意:如果要将参数应用于模型,则
ModelDrivenInterceptor
必须位于StaticParametersInterceptor
和ParametersInterceptor
之前。注意:
ModelDrivenInterceptor
只会在模型不为null
时将模型推入堆栈,否则将被忽略。
您可以使用模型驱动的方法,它为视图和控制器推送模型。 您的代码中缺少最后一个。
Push 不是 ui 标签。 推送用于将对象放入值堆栈的顶部。 如果您的对象不在堆栈顶部,您可以使用object.attributname
获取您的值。 如果您的对象在值堆栈中,您可以直接访问它attributename
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.