Topic: 解決JSP程式撰寫不直覺、程式碼與UI混雜的痛: JSPWidget (0.9.4 版新增加 action 的功能)

  Print this page

1.解決JSP程式撰寫不直覺、程式碼與UI混雜的痛: JSPWidget (0.9.4 版新增加 action 的功能) Copy to clipboard
Posted by: lee5518
Posted on: 2003-07-11 16:00

相关话题: http://www.cjsdn.com/post/view?bid=2&id=37650

JSPWidget 0.9.4 版新增加了 action 的功能了唷
之前在 try 這個 Tag Library 時
發現蠻好用的
可是後來發現在 sbumit 時
不能自己指定 action 的值
也就是由 servlet 或是別的 JSP 來接收
現在新版在 form 裡面增加了 action 功能
下面是我使用簡單的 MVC 所做的測試
我使用的 OS 是 winxp
JDK 的版本 j2sdk1.4.2
湯姆貓(Tomcat)的版本 tomcat-4.1.24

web.xml 的部分設定
<web-app>
.
.
.
<servlet>
<servlet-name>JackyTest</servlet-name>
<servlet-class>jacky.servlet.JackyTest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JackyTest</servlet-name>
<url-pattern>/JackyTest</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>/jsp/index.htm</welcome-file>
</welcome-file-list>
<taglib>
<taglib-uri>/jspwidget</taglib-uri>
<taglib-location>/WEB-INF/jspwidget.tld</taglib-location>
</taglib>
.
.
.
</web-app>

在湯姆貓(Tomcat)實際檔案的路徑
JSP
C:\Program Files\Apache Group\Tomcat 4.1\webapps\jacky\jsp
servlet
C:\Program Files\Apache Group\Tomcat 4.1\webapps\jacky\WEB-INF\classes\jacky\servlet
classes
C:\Program Files\Apache Group\Tomcat 4.1\webapps\jacky\WEB-INF\classes\jacky\util

總共有 2 個 JSP 的程式和 1 個 servlet 的程式和 1 個 JAVA 的程式
1. jacky_10.jsp (輸入的頁面有包含宣告式欄位編審(Declarative Validation))
2. jacky_11.jsp (從 session 中抓出要呈現的值)
3. JackyTest.class (servlet 的程式)
4. JackyUtil.class (JAVA 的程式)

jacky_10.jsp :
<%@ page contentType="text/html;charset=big5" session="true" import="com.ucom.dao.sql.*,com.ucom.util.*,java.util.*,com.ucom.jsp.tags.gui.*,com.ucom.jsp.tags.validation.*,com.ucom.jsp.tags.sql.*,com.ucom.jsp.tags.util.*" %>
<%@ taglib uri="/jspwidget" prefix="jacky" %>
<HTML>
<HEAD>
<TITLE></TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=big5" />
</HEAD>
<BODY>
<jacky:form id="jspForm" action="/jacky/JackyTest">
<h4>requiredFieldValidator Widget</h4>
<table cellpadding=0 border=1>
<tr valign="middle">
<td>頁面驗證結果:</td>
<td>
<span id="lblOutput" style="color:Red;font-size:14pt;">請填寫以下欄位</span>
</td>
</tr>
<tr>
<td colspan=2 align=center><b>個人資訊</b></td>
</tr>
<tr>
<td align=right><font size=2 color=red>姓名:</font></td>
<td>
<jacky:textBox id="requiredFieldTextBox1"/>
<jacky:requiredFieldValidator id="TextBox1_val1"
controlToValidate="requiredFieldTextBox1"
     display="Static"
onMouseOver="this.style.backgroundColor='lightblue' "
onMouseOut="this.style.backgroundColor='white' "
    errorMessage="*:不可空白" />

<tr>
<td align=right><font size=2 color=red>教育程度:</font></td>
<td>
<jacky:dropdownList id="requiredFieldDropdownList1" >
<jacky:listItem text="" value="" />
<jacky:listItem text="研究所以上" value="01" />
<jacky:listItem text="大學" value="02" />
<jacky:listItem text="專科" value="03" />
<jacky:listItem text="高中職" value="04" />
<jacky:listItem text="其他" value="05" />
</jacky:dropdownList>
<jacky:requiredFieldValidator id="DropdownList1_val1"
  controlToValidate="requiredFieldDropdownList1"
  errorMessage="*您總有個教育程度吧?" />
</td>
</tr>
<tr>
<td></td>
<td>
<jacky:button id="btnSbumit" text="送出" causeValidation="true" />
</td>
</tr>
</table>
</jacky:form>
</BODY>
</HTML>

jacky_11.jsp :
<%@ page contentType="text/html;charset=big5" session="true" import="com.ucom.dao.sql.*,com.ucom.util.*,java.util.*,com.ucom.jsp.tags.gui.*,com.ucom.jsp.tags.validation.*,com.ucom.jsp.tags.sql.*,com.ucom.jsp.tags.util.*" %>
<%@ taglib uri="/jspwidget" prefix="jacky" %>
<HTML>
<HEAD>
<TITLE></TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=big5" />
</HEAD>
<BODY>
<jacky:form id="jspForm" trace="true">
<%
  String temp01 = (String)session.getAttribute("requiredFieldTextBox1");
  String temp02 = (String)session.getAttribute("requiredFieldDropdownList1");
  out.println("The temp01 is : " + temp01);
  out.println("<br>");
  out.println("The temp02 is : " + temp02);
%>
</jacky:form>
</BODY>
</HTML>

JackyTest.class (servlet 的程式)
package jacky.servlet;

import javax.servlet.*;
import javax.servlet.http.*;
import jacky.util.*;

public class JackyTest extends HttpServlet {

/** Initializes the servlet.
*/
public void init(ServletConfig config) throws ServletException {
super.init(config);

}

/** Destroys the servlet.
*/
public void destroy() {

}

/** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
response.setContentType("text/html; charset=BIG5");

JackyUtil util = new JackyUtil();
util.processThisRequest(request);
System.out.println("EVERGREEN");
response.sendRedirect("/jacky/jsp/jacky_11.jsp");
}

/** Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
processRequest(request, response);
}

/** Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
processRequest(request, response);
}

/** Returns a short description of the servlet.
*/
public String getServletInfo() {
return "Short description";
}

}

JackyUtil.class (JAVA 的程式)
package jacky.util;

import javax.servlet.*;
import javax.servlet.http.*;

public class JackyUtil{

public void processThisRequest(HttpServletRequest request) {
HttpSession user_session = request.getSession();

if (request.getParameter("requiredFieldTextBox1") != null) {
  user_session.setAttribute("requiredFieldTextBox1", request.getParameter("requiredFieldTextBox1"));
}

if (request.getParameter("requiredFieldDropdownList1") != null) {
  user_session.setAttribute("requiredFieldDropdownList1", request.getParameter("requiredFieldDropdownList1"));
}
}
}

開始測試
1. 在網頁上輸入
http://localhost:8080/jacky/jsp/jacky_10.jsp
這時候就可以試試沒輸入和有輸入的差別(宣告式欄位編審(Declarative Validation))
2. 按下〝送出〞的按鈕後
把結果傳回 servlet (JackyTest.class) (扮演的是 Controller 的角色)
3. 然後 servlet 呼叫專門處理邏輯的程式 (JackyUtil.class)
把傳過來的值寫到 session 中(扮演的是 Model 的角色)
4. 最後呼叫 JSP 來呈現 (jacky_11.jsp)(扮演的是 View 的角色)

個人覺得 JSPWidget 還蠻好用的
可以幫我解決不少 UI 方面控制的問題
有興趣的話
大家可以試試唷~~~

JSPWidget 的相關網址
http://edu.uuu.com.tw/jspwidget/

2.Re:解決JSP程式撰寫不直覺、程式碼與UI混雜的痛: JSPWidget (0.9.4 版新增加 action 的功能) [Re: lee5518] Copy to clipboard
Posted by: supertoy
Posted on: 2003-07-14 11:49

我还是建议你看一下sofia(www.salmonllc.com),同样的东西人家早就实现了
而且和ide/dreamweaver集成,更好用,为什么要做重复的工作?你可以考虑
加入sofia,帮他们改进ui这一块的内容。
原来我就觉得你没有真正意义上的controller,现在加入action解决了这个问题,
但是还远没有struts/sofia处理得好,至少sofia不需要你考虑太多request, response得值怎么取,况且mvc2的模式要复杂,action的配置哪一个框架做的都不太是太好。
比较起来,我还是觉得sofia更想asp.net,只是有些问题考虑得还不够,另外代码
质量也够理想。


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923