繁体   English   中英

如何将 Struts 2 push 标签用于表单输入字段?

[英]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>及其varIteratorStatus属性...:

  • 展现价值,任何方式都是好方式;
  • 发送值,唯一的方法是在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必须位于StaticParametersInterceptorParametersInterceptor之前。

注意: ModelDrivenInterceptor只会在模型不为null时将模型推入堆栈,否则将被忽略。

您可以使用模型驱动的方法,它为视图和控制器推送模型。 您的代码中缺少最后一个。

使用ModelDriven方法的示例

Push 不是 ui 标签。 推送用于将对象放入值堆栈的顶部。 如果您的对象不在堆栈顶部,您可以使用object.attributname获取您的值。 如果您的对象在值堆栈中,您可以直接访问它attributename

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM