2015-04-05 143 views
0

我是Struts2框架的新手,當我嘗試編輯對象時發現問題。編輯操作返回null

我修改動作的代碼:

@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

我認爲問題出在參數!

回答

0

如果輸入元素具有disabled="disabled"屬性,則在提交表單時它不會包含作爲參數。還要重命名與參數名稱對應的輸入元素名稱。 Struts2 getter/setter可以用來填充動作bean。

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

我已經試過了,但始終不變的空參數:)日Thnx – abdel 2015-04-05 13:25:09

+0

上面的方法調用了嗎? – 2015-04-05 13:58:12

+0

我不這麼認爲,也許問題是在我的行動聲明的形式action =「modifyServer」我應該添加參數嗎? – abdel 2015-04-05 14:01:44

0

我建議檢查通過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(); 
    } 
+0

我試過了,但它無論如何thnx先生 – abdel 2015-04-06 09:17:55

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" 

最後操作的代碼如下所示:

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; 

    } 
}