如何更改控制器,使其与我的视线充分分离?

时间:2019-03-24 10:11:41

标签: javascript java spring-mvc jsp model-view-controller

我正在使用Spring MVC编写一个Web应用程序,其中我需要创建一些我无法直接通过jsp创建的元素。特别是所有列出我从数据库中获得的值的参数,因为在知道其大小之前无法在jsp中创建结构。这是我现在的操作方式:

@RequestMapping(method = RequestMethod.GET)
public ModelAndView getAllEjercicios (...)

...

Table table = new Table("table_ejercicios", "table_ejercicios", new ArrayList<TableHead>(Arrays.asList(tH1, tH2, tH3)), getEjercicioTableContent(ejercicioList));

...

model.put("table", table.getCode());

return new ModelAndView("ejercicio/ejercicio-list", MODEL_NAME, model);

这是我的控制器方法,其中Table是我创建的自定义类,当使用给定的参数调用getCode()时,该类将返回表的html代码。问题在于,我开始看到我的Controller尚未充分解耦,因为它传递了视图的整个对象的HTML代码,而不是仅用于在jsp文件中构建它的参数。顺便说一句,这不仅是特定表的问题,我的代码中还有其他下拉列表和类似内容。

问题是,如果我使用的javascript函数在jsp中接收与我的表相同的参数,那么我将不得不在使用相似表的其他视图中复制很多代码,因为我必须复制每个jsp文件中的整个javascript函数。

我的代码运行正常,这不是问题,不是结构问题。

我应该怎么做,应该保持我的代码不变,还是有我没有想到的解决方案?

谢谢

1 个答案:

答案 0 :(得分:1)

html页面包含许多元素,例如表格,表单,下拉列表...。如果您在后端生成所有UI元素,则服务器端代码将充满客户端代码!如您所知,这不是一个好习惯。

我认为最佳实践是呈现html页面,而没有任何额外的UI元素,只是带有数据的html代码。您甚至可以从页面中排除数据,并用ajax请求中的数据填充html元素。但是,您的控制器将完全摆脱UI代码。使用这种方法,您需要关注的是客户端中的代码重复。可以通过生成JavaScript实用程序解决。例如,您在多个页面中具有相同的html表结构。为此,您可以编写一个用于生成表的javascript函数。此函数可以使用一些参数,并将动态表添加到所需的每个页面。您可以为表单和下拉菜单之类的其他元素做类似的工作。