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 回宣言されます (表の行にデータを入力するときに 2 回、列ラベルに 1 回)。ラベルの 1 つが変更された場合、プログラマーはそれらの場所のいずれかでそれを変更するのを忘れる可能性があります。

コードの品質を向上させる方法について何かコメントはありますか?

4

2 に答える 2

1

私の意見では、ポートレット (java) によってデータを作成し、可視化のみを jsp に入れるには、常にこれがより良い方法です。Java で JSON を作成するのはそれほどエレガントではないことはわかっていますが、シリアル化にはさまざまなフレームワークを使用できます。

ジャクソン: https://github.com/FasterXML/jackson-databind/

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

またはhttp://json.org/java/でプレーンな JSON を作成しますorg.json.*

Java で JSON 配列を作成する方法も参照してください。

列名をJavaパスに入れることもできます。

于 2014-01-02T15:41:58.837 に答える
0

JSON オブジェクトが作成されるサーブレットを使用しています。

そしてjspで、サーブレット/ポートレットからJSONデータを取得するデータテーブルを作成します(あなたの場合)。

このようにして、GUI を簡単に制御できることがわかりました。

YUI データテーブル : http://yuilibrary.com/yui/docs/datatable/

于 2014-01-03T16:24:42.920 に答える