在这种情况下,如何保持自己的干燥并防止代码爆炸

时间:2010-10-01 09:25:15

标签: java flash jsf

我的应用程序允许用户浏览世界地图。当用户点击某个国家/地区时,会显示思维导图。然后,用户遍历此思维导图的节点。例如,当用户点击新加坡时,会显示思维导图。接下来,用户点击作业功能,例如人力资源。最后一个节点将用户重定向到另一个页面,其中有一个JSF数据表显示相应位置和功能中的作业配置文件。对应于每个数据表的典型方法如下所示。

    public ResultSet getAll() throws SQLException {
    Connection conn = ds.getConnection();
    try {
        Statement stmt = conn.createStatement();
        ResultSet result = stmt.executeQuery("SELECT * FROM JOBPROFILE WHERE LOCATION='SINGAPORE' AND JOBFUNCTION='HUMAN RESOURCES'");
        CachedRowSet crs = new CachedRowSetImpl();
        crs.populate(result);
        return crs;
    } finally {
        conn.close();
    }
}

问题在于我有16个位置和14个功能。这意味着我有 224 页面,数据表&写的方法!维护将是一场噩梦。有没有什么方法可以以编程方式执行此操作,因此我不必一遍又一遍地重复大部分代码?每个方法之间唯一的差异是SQL查询。我正在flash中实现世界地图和思维导图,因此我不确定如何检索用户点击的最终值,并将其传递给辅助bean,以便我可以调用相关查询,编写224个不同的页面,数据表和方法,只在一行代码中有所不同。

1 个答案:

答案 0 :(得分:0)

您应该将数据存储在超链接中。即

foo.com/jobs?country=singapore&jobfunction=humanresources
然后,JSF可以接受并调用更可恢复的方法:

public ResultSet getAll(String location, String profile) throws SQLException {
    Connection conn = ds.getConnection();
    try {
        Statement stmt = conn.createStatement();
        ResultSet result = stmt.executeQuery("SELECT * FROM JOBPROFILE WHERE LOCATION='"+location+"' AND JOBFUNCTION='"profile"'");
        CachedRowSet crs = new CachedRowSetImpl();
        crs.populate(result);
        return crs;
    } finally {
        conn.close();
    }
}

请记住,您应该使用prepared statement

来逃避这些,或者更好