2

我正在开发portlet一个Liferay门户网站。我正在尝试使用AlloyUI Data Table并且我的代码目前正在运行,但是我担心我这样做的方式不是优雅且易于维护的方式。

以下是我的代码View.jsp

<%@page import="java.util.ArrayList"%>
<%@page import="com.mypackage.model.hpuc.Unit"%>
<%@page import="java.util.List"%>
<%@page import="javax.portlet.PortletPreferences"%>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%>

<portlet:defineObjects />

This is the <b>Units Folder</b> portlet in View mode.

<%
    List<Unit> hpUnits = 
        (List<Unit>)renderRequest.getAttribute("hpUnits");
%>


<script>
var data = [

<%//loop through all but last because of the
//coma that shouldn't be added for the last element
    for (int i = 0; i < hpUnits.size() - 1; i++){ 
        Unit unit = hpUnits.get(i);%>
        { 
            description: '<%=unit.getDescription()%>',
            city: '<%=unit.getContactData().getAddress().getCity()%>', 
            name: '<%=unit.getRegistrationInfo().getName()%>'
        },  

<%} //close for loop 

    //add last element
    Unit lastUnit = hpUnits.get(hpUnits.size() -1);%>

    {   
        description: '<%= lastUnit.getDescription()%>',
        city: '<%= lastUnit.getContactData().getAddress().getCity()%>',
        name: '<%= lastUnit.getRegistrationInfo().getName() %>'
    }
]; //close data2 array
</script>

<div id="myDataTable"></div>

<script>
YUI().use(
  'aui-datatable',
  function(Y) {
    var columns = ['name', 'city', 'description'];

    new Y.DataTable.Base(
      {
        columnset: columns,
        recordset: data
      }
    ).render('#myDataTable');
  }
);
</script>

我在这段代码中看到的问题如下:

  1. 将脚本与 javascript 代码混合。如果代码变得更大,可能会非常混乱。
  2. 每个标签被声明 3 次(为表行填充数据时两次,为列标签填充一次)。如果要更改其中一个标签,程序员可能会忘记在任何这些地方更改它。

您对如何提高代码质量有任何意见吗?

4

2 回答 2

1

在我看来,这始终是通过 portlet (java) 创建数据的更好方法,并且只有将可视化放到 jsp 中。我知道用java创建JSON不是那么优雅,但是你可以使用各种框架进行序列化

杰克逊:https ://github.com/FasterXML/jackson-databind/

XStream:http: //x-stream.github.io/json-tutorial.html

或使用http://json.org/java/创建纯 JSONorg.json.*

另请参阅如何在 Java 中创建 JSON 数组

您还可以将列名放入 java 路径。

于 2014-01-02T15:41:58.837 回答
0

我正在使用 servlet,在其中创建了我的 JSON 对象。

在 jsp 中,创建一个从 servlet/portlet(在您的情况下)获取 JSON 数据的数据表。

这样,我发现很容易控制我的 GUI。

YUI 数据表:http: //yuilibrary.com/yui/docs/datatable/

于 2014-01-03T16:24:42.920 回答