我正在开发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>
我在这段代码中看到的问题如下:
- 将脚本与 javascript 代码混合。如果代码变得更大,可能会非常混乱。
- 每个标签被声明 3 次(为表行填充数据时两次,为列标签填充一次)。如果要更改其中一个标签,程序员可能会忘记在任何这些地方更改它。
您对如何提高代码质量有任何意见吗?