私はポータル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 回宣言されます (表の行にデータを入力するときに 2 回、列ラベルに 1 回)。ラベルの 1 つが変更された場合、プログラマーはそれらの場所のいずれかでそれを変更するのを忘れる可能性があります。
コードの品質を向上させる方法について何かコメントはありますか?