【问题标题】:Edit action returns null编辑操作返回 null
【发布时间】:2015-06-09 23:51:44
【问题描述】:

我是 Struts2 框架的新手,在尝试编辑对象时发现了一个问题。

我的修改动作代码:

@Action(value = "modifyServer", results = {
        @Result(name = "success", location = Location.MAIN_PAGE),
        @Result(name = "error", location = Location.LOGIN_PAGE) })
public String modifyServer() {
    em = DbConnexion.getEntityManager().createEntityManager();
    String id=request.getParameter(sssid);
    logger.info("id serveur         = "+request.getParameter("id")); 
    try {
        em.getTransaction().begin();
        Simserver server = em.find(Simserver.class, id);
        server.setSssServer(request.getParameter("sssServer"));
        server.setSssIp(request.getParameter("sssIp"));
        server.setSssPort(request.getParameter("sssPort"));
        em.getTransaction().commit();
        System.out.println("modification done !!!");
        em.close();
        return SUCCESS;
    } catch (Exception e) {
        return ERROR;
    }
}

JSP:

   <form class="form-horizontal" action="modifyServer" role="form"
name="form_message" method="get">
<div id="elmsg"></div>
<div class="panel panel-info">
    <div class="panel-heading expand" id="second-level">
        <h6 class="panel-title">Modification du Serveur</h6>
    </div>
    <div class="panel-body">
        <div class="form-group">
            <label class="col-sm-2 control-label"> Id du Serveur : <span
                class="mandatory">*</span></label>
            <div class="col-sm-10">
                <input type="text" class="form-control" name="sssId"
                    disabled="disabled" id="sssId"
                    value="<s:property value="#request.curentserver.sssId" />">
            </div>
        </div>

        <div class="form-group">
            <label class="col-sm-2 control-label"> Nom du Serveur : <span
                class="mandatory">*</span></label>
            <div class="col-sm-10">
                <input type="text" class="form-control" name="sssServer"
                    id="sssServer"
                    value="<s:property value="#request.curentserver.sssServer" />">
            </div>
        </div>
        <div class="form-group">
            <label class="col-sm-2 control-label"> Adresse IP : <span
                class="mandatory">*</span></label>
            <div class="col-sm-10">
                <input type="text" class="form-control" name="sssIp" id="sssIp"
                    value="<s:property value="#request.curentserver.sssIp" />" />
            </div>
        </div>
        <div class="form-group">
            <label class="col-sm-2 control-label"> Port : <span
                class="mandatory">*</span></label>
            <div class="col-sm-10">
                <input type="text" class="form-control" name="sssPort" id="sssPort"
                    value="<s:property value="#request.curentserver.sssPort" />" />
            </div>
        </div>

        <div class="form-actions text-right">
            <button type="submit" value="Envoyer" class="btn btn-success"
                >Modifier le serveur</button>
            <a role="button" href="gestionServeurList" class="btn btn-danger">Retour
                à la list des serveurs</a>
        </div>

当我执行我的操作时,request.getParameter 返回null

我认为问题出在参数上!

【问题讨论】:

    标签: java forms jsp struts2 ognl


    【解决方案1】:

    代码有问题:

    在 Java 代码中,您尝试打印名称为“id”而不是“sssId”的请求参数。

    您还尝试使用一个名为“sssid”的变量,该变量在您的问题中没有定义。

    String id=request.getParameter(sssid);
    logger.info("id serveur  = "+request.getParameter("id"));
    

    在 JSP 中,sssId 元素被禁用,当您提交表单时,禁用的元素将被忽略。

    <input type="text" class="form-control" 
        name="sssId" disabled="disabled" id="sssId"
        value="<s:property value="#request.curentserver.sssId" />">
    

    因此,要获取它的值,请在您的 jsp 中创建一个隐藏元素,并在提交表单时使用 JavaScript 将隐藏元素更新为所需的值。

    <input type="hidden" name="sssId" value=""/>
    

    在 Javascript 中会是这样的:

    document.getElementById("sssId").value = 123; // Give value here
    
    document.getElementById("myForm").submit(); // Give an Id to your form, say "myForm"
    

    最后,Action 代码如下所示:

    public class MyAction extends ActionSupport implements ServletRequestAware {
        @Action(value = "modifyServer", results = {
                @Result(name = "success", location = Location.MAIN_PAGE),
                @Result(name = "error", location = Location.LOGIN_PAGE) })
        public String modifyServer() {
            String id = request.getParameter("sssId");
            System.out.println("id serveur = " + id);
            return null;
        }
    
        private HttpServletRequest request;
    
        @Override
        public void setServletRequest(HttpServletRequest request) {
            this.request = request;
    
        }
    }
    

    【讨论】:

      【解决方案2】:

      我建议检查通过 javascript 传递给操作的 sssId 的值。

       <button onclick='javascript:submitMyForm();' type="button" value="Envoyer" class="btn btn-success"
                      >Modifier le serveur</button>
      

      编写以下javascript

        function submitMyForm(){
          var sssIdElement  = document.getElementById("sssId");
          document.form_message.action = "modifyServer.action?sssId="+sssIdElement;
          document.form_message.submit();
        }
      

      【讨论】:

        【解决方案3】:

        如果输入元素具有disabled="disabled" 属性,则在提交表单时它不会作为参数包含在内。还要重命名与参数名称对应的输入元素名称。 Struts2 getter/setter 可用于填充动作 bean。

        public void setSssId(String id){
          this.id = id;
        }
        

        【讨论】:

        • 我试过了,但总是相同的空参数:) thnx
        • 上面的方法调用了吗?
        • 我不这么认为,也许问题出在以 action="modifyServer" 形式声明我的操作时我应该添加参数吗?
        • 所以,你只是没有加参数,问为什么是null
        • 我尝试添加它,但我认为我的语法有错误,所以我删除了它,请你给我正确的写法吗?
        猜你喜欢
        • 1970-01-01
        • 2020-01-12
        • 2018-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-06
        • 2011-09-23
        • 1970-01-01
        相关资源
        最近更新 更多