【问题标题】:Passing value from jsp to Action for java.util.Set将值从 jsp 传递给 java.util.Set 的 Action
【发布时间】:2014-09-09 12:19:26
【问题描述】:

我想为来自 JSP 的登录的 Set 元素设置值。

JSP 页面:

  <form action="Registered" method="post"> 
        <div class="form-group">
            <label>Company Name</label>
            <s:textfield name="name" value="%{name}" id="name"/>
        </div>
        <div class="form-group">
            <label>Address</label>
            <s:textarea name="address" value="%{address}" id="address"/>
        </div>
        <div class="form-group">
            <label>User Name</label>
            <s:textfield name="logins[0].userName" value="%{logins[0].userName}" id="userName"/>
        </div>
        <div class="form-group">
            <label>User Id</label>
            <s:textfield name="logins[0].userId" value="%{logins[0].userId}" id="userId"/>
        </div>
        <div class="form-group">
            <label>Mail Id</label>
            <s:textfield name="logins[0].userMailid" value="%{logins[0].userMailid}" id="userMailid"/>
        </div>

Pojo 类:

public class Client  implements java.io.Serializable {
  private Set logins = new HashSet(0);
  //getter and setter
 }



 public class Login implements java.io.Serializable {

    private Long id;
    private Client client;
    private String userId;
    private String userName;
    private String userMailid;
 }

动作类:

public String register() {
        Client cl = new Client();
        System.out.println(cl.getName() + " " + cl.getAddress());
  }

我想为 Client 和 Login 设置我的 Action 类中的 set 值。

如何做到这一点?

【问题讨论】:

  • 您想从文本字段中获取值还是想在文本字段中设置默认值?
  • 用户将填写表单 提交表单时,应在客户端和登录字段中填写
  • @AleksandrM stackoverflow.com/a/24191304/876739 为片场工作。我怎么能用这段代码做到这一点
  • 使用Set有什么要求? List 可能是一个合理的替代品。

标签: java jsp type-conversion struts2 ognl


【解决方案1】:

要将 fildes 绑定到 Set,您应该在此属性上添加注释

public class Client  implements java.io.Serializable {

  @Element(value = Login.class)
  @Key(value = Long.class)
  @KeyProperty(value = "id") 
  @CreateIfNull(value = true)
  private Set logins = new HashSet(0);
  //getter and setter

  //now you need a property for login id, it should be initialized before JSP is populated
  private Long loginId;
  //getter and setter
}

现在绑定到 JSP 的字段更改为

<s:textfield name="logins(%{loginId}).userName" id="userName"/>

绑定到集合的其他字段也是如此。

如果您使用迭代器标签来遍历一个集合,并且您有一个 Login 的实例被推送到值堆栈的顶部,那么您可以获得它的 id 而不是使用 loginId

【讨论】:

    【解决方案2】:

    您可以使用这样的提交按钮:

     <form action="Registered" method="post"> 
                <div class="form-group">
                    <label>Company Name</label>
                    <s:textfield name="name" value="%{name}" id="name"/>
                </div>
                <div class="form-group">
                    <label>Address</label>
                    <s:textarea name="address" value="%{address}" id="address"/>
                </div>
                <div class="form-group">
                    <label>User Name</label>
                    <s:textfield name="logins[0].userName" value="%{logins[0].userName}" id="userName"/>
                </div>
                <div class="form-group">
                    <label>User Id</label>
                    <s:textfield name="logins[0].userId" value="%{logins[0].userId}" id="userId"/>
                </div>
                <div class="form-group">
                    <label>Mail Id</label>
                    <s:textfield name="logins[0].userMailid" value="%{logins[0].userMailid}" id="userMailid"/>
                </div>
              <input type="submit" value="Submit">
            </form>
    

    编辑

    一个不错的tutorial

    制作后的属性文件如下:

    #Global messages
    name= name
    submit = Submit
    

    相信你已经制作了Registered.jsp。

    你可以运行你的项目!

    【讨论】:

    • 我忘了加上还有一个提交按钮
    • 在第一个jsp" "
    • 如果您愿意,我可以使用已完成的示例编辑我的答案
    • 我正在使用 struts2 其中String name = request.getParameter("name"); 不需要从 jsp 中获取价值
    • 好的。我不知道。所以你解决你的问题还是我编辑我的答案?
    猜你喜欢
    • 2012-04-18
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 2014-01-17
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多