2017-04-21 24 views
0

在Struts應用程序中,一些控制器將Javascript代碼寫入HTTP響應(此JS代碼將在提交結束時執行)。你認爲這是一種糟糕的做法還是可以接受的?設置一個屬性並將JS代碼移動到視圖會更好嗎?將Javascript代碼寫入控制器的HTTP響應

@UserInterfaceEvent 
public void aceptar_onClick(FormActionContext ctx) { 

    IGenerateDocListOutputBF bproxy = ProxyFactory.newBusinessProxy(getBusinessComponent(), IGenerateDocListOutputBF.class); 

    GenerateDocListOutputForm form = (GenerateDocListOutputForm) ctx.form(); 
    String mode = form.getDetailMode(); 
    removeErrors(ctx); 

    GemaBrowseControl browse = (GemaBrowseControl) ctx.session().getAttribute("outputs"); 
    SelectedData data = browse.getAllSelectedData(ctx, true); 

    try { 
     bproxy.generateOutputs(data.getSelectedDboids(), form.getDboid(), false); 
     if (GemaAppErrorMgr.currentScopeHasErrors()) { 
      ctx.request().setAttribute(DetailRequest.MODE, mode); 
      showErrorPopUp(ctx); 
     } else { 
      String javascript = "<script>window.opener.refreshDivDocsRelated(); window.close();</script>";   
      ctx.response().getOutputStream().print(javascript); 
      ctx.forwardToResponse(); 
     } 
    } catch (Exception e) { 
     handleException(e, ctx.request()); 
    } 
} 

回答

2

在我看來,這是非常不好的做法。混合業務邏輯和表示層不僅會使其更難理解(如果後端開發人員根本不瞭解JS),但更重要的是它會使調試變得更加困難,特別是在大型項目中人們在不斷變化,這些知識正在流失。

我會實現一個AJAX調用,並在請求完成時執行該JS(位於view的c端)。

+0

是的,它可以通過Ajax調用完成,但需要大量的重構(這是一箇舊的應用程序)。 –