??xml version="1.0" encoding="utf-8" standalone="yes"?> <%@page contentType="text/html;charset=gb2312" language="java"%> <tiles:insert page="Template.jsp">
<tiles:insert>的作用类gҎ(gu)中的形参Q该标记被调用到该模板的页面?lt;tiles:insert />?lt;tiles:put />标记指定的具体信息?br />
下面?x)有一个例子:(x)
Template.jsp模板:(x)
<%@taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles"%>
<html>
<body>
<table width="80%" higth="80%" bordercolor="#ffddff">
<tr height="15%" bgcolor="#ddbbcc">
<td>
<tiles:insert attribute="header" />
</td>
</tr>
<tr height="50%" bgcolor="#ffaaaa">
<td>
<tiles:insert attribute="content" />
</td>
</tr>
<tr height="15%" bgcolor="#ccccff">
<td>
<tiles:insert attribute="footer" />
</td>
</tr>
</table>
</body>
</html>
关键的show.jsp
<%@taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
<tiles:put name="header" value="A.jsp"></tiles:put>
<tiles:put name="content" value="B.jsp"></tiles:put>
<tiles:put name="footer" value="C.jsp"></tiles:put>
</tiles:insert>
A.jsp部分Qb.jsp和c.jsp略过
<%@page contentType="text/html;charset=gb2312" language="java"%>
<%@taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
演示信息Q表头部?br />
重定向标?lt;logic:redirect>
1Q其?lt;logic:forward>标记可以请求{发给全局ActionForward指定的响应页面。此标记只有一个name属性,
(q条文章已经被阅M(jin)364? 旉Q?002q?3?8?18:59 来源Q韩?原创-IT
1. 命名
1.1 Package的名字由一个小写单词组成;
一个特有的包的名字的第一部分L全部使用写字母Q?
q应该是域名中的一个,现在有com, edu, gov, mil, net, orgQ?
或者是在ISO标准3166Q?981中定义的两个字母的国家标识?
q样的规则可定某一目录分开的组Ӟ部门Q项目,或登陆名
com.sun.eng , com.apple.quicktime.v2 ,org.apache.catalina
1.2 Class/InterfaceQ大写字母开头而其他字母都写Q?
cȝ名字应是名词Q合大写Q每个词的第一个字母大写?
量保证你的cȝ名字单ƈ是描q性的。用完整的单词-避免
头字语和~写Q除非羃写比长的格式更广泛用,例如URL or HTMLQ?
class ImageSprite , interface RasterDelegate
1.3 Ҏ(gu)应是动词Q合大写Q第一个字母小写,每个内部的词
的第一个字母大写;除了(jin)变量Q所有的实例、类和类的常量都
是以写字母开头的混和大小写。内部的词以大写字母开头?
变量名字不应以下划线或美元符$开始,管二者都是允许的?
run() ,runFast() , getBackground()
1.4 变量名字应简短但有意义。变量名字的选择应该是可记忆
?--是说给普通的人指出它的用的目的Q除非是临时的。(f)时变
量的一般的名字对于整Ş变量是i,j,k,m,和nQ对于字W是c,d,和e?
int i;
char c;
float myWidth;
1.5 帔RQ声明类帔R的变量和ANSI帔R的名字ؓ(f)下划U分开?
大写字母单词Q应避免ANSI帔RQ除非ؓ(f)?jin)调试?j)
static final int MIN_WIDTH = 4;
static final int MAX_WIDTH = 999;
2. 文g
2.1 开_(d)(x)注释(name,versionQdate,copyright)Qpackage,importQ?
/*
* Classname
*
* Version information
*
* Date
*
* Copyright notice
*/
package java.awt;
import java.awt.peer.CanvasPeer;
2.2 Class/InterfaceQJavaDoc文档注释Q体Q包含程序、运行和其他注释Q;
变量Q实例,Ҏ(gu){:(x)按publicQprotectQprivate排列Q尽量少用public?
参见最后example
3. ~进
3.1 避免每行多于80 个字W,逗号后或q算W前断开Q?
someMethod(longExpression1, longExpression2, longExpression3,
longExpression4, longExpression5);
var = someMethod1(longExpression1,
someMethod2(longExpression2,
longExpression3));
3.2 较高U的断开比较低的断开更好Q新行应与同U?
上一行的开头对齐;以下是断开术式的两个例子?
W一个较好,因ؓ(f)断开出现在算术式以外Q处于较高(sh)U?
longName1 = longName2 * (longName3 + longName4 - longName5)
+ 4 * longname6; // PREFER
longName1 = longName2 * (longName3 + longName4
- longName5) + 4 * longname6; // AVOID
3.3 ~排的一个单位应使用4 个空|不用制表符而尽量用空根{?
通常语句使用8个空格羃q,p折行Q由于传l的Q?个空|(j)
~进使观察程序体比较难。例如:(x)
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) { file://BAD WRAPS
doSomethingAboutIt(); file://MAKE THIS LINE EASY TO MISS
}
file://USE THIS INDENTATION INSTEAD
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}
4. 注释QJavaE序有两cL释:(x)文档注释和执行注释?
4.1 文档注释只有javahQ?**...*/。能够被javadoc 工具生成HTML文档Q?
描述c,接口Q构造器Q方法和字段Q相当于使用指南?
/**
* Class description goes here.
*
* @version 1.82 18 Mar 1999
* @author Firstname Lastname
*/
4.2 执行注释是那些在使用在C++中的/*...*/?/。目的ؓ(f)?jin)理解程序和q行Q?
包括不适合于文档注释的内容Q块状或一行,使用/*...*/Q注释程序可使用//Q?
也可攑֜短行后面Q尽量对齐?
/*
* @(#)Blah.java 1.82 99/03/18
*
* Copyright (c) 1994-1999 Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
* All rights reserved.
*
* This software is the confidential and proprietary information of Sun
* Microsystems, Inc. ("Confidential Information"). You shall not
* disclose such Confidential Information and shall use it only in
* accordance with the terms of the license agreement you entered into
* with Sun.
*/
/* A class implementation comment can go here. */
// implementation comment
5. 声明declaration
5.1 每行一个声明,加以注释Q?
int level; // indentation level
int size; // size of table
5.2 不要在同一行放|不同的cdQ?
int foo, fooarray[]; file://WRONG!
5.3 只在块的开始处Q放|声明;
W一ơ用时再声明,增强代码的可UL性?
if (condition) {
int int2 = 0; // beginning of "if" block
...
}
for (int i = 0; i < maxLoops; i++) { ... }
5.4 Ҏ(gu)后紧?(" Q?{"出现在行?
Sample(int i, int j) {
ivar1 = i;
ivar2 = j;
}
6. 语句
6.1 每行最多包括一个语句;
argv++; // Correct
argc--; // Correct
argv++; argc--; // AVOID!
if (condition) {
statements;
} else {
statements;
}
for (initialization; condition; update) {
statements;
}
6.2 比较重要的一个:(x)
try {
statements;
}catch (ExceptionClass e) {
statements;
}
7. I格
7.1 利用I分隔代码D|提高可读性;
7.2 使用IQ类Q接口,Ҏ(gu)之间Q在一个方法的本地变量和它的第一个语句间Q?
7.3 被一个圆括号跟着的关键字应被一个空格所分开Q?
?while (true) { ",
但方法不分开?
7.4 参数列表中的逗号之后使用一个空根{?
public void doSomethingElse(Object someParam, String twoParam)
7.5 二进制的操作W与CI格分开,?a = (a + b) / (c * d);" ?
8. 其它
8.1 避免使用一个对象来讉K一个类的(?rn)态)(j)变量或方法?
而是使用一个类的名字;
classMethod(); file://OK
AClass.classMethod(); file://OK
anObject.classMethod(); file://AVOID!
8.2 避免分配多个变量l同样值在一个单独的语句中;
fooBar.fChar = barFoo.lchar = 'c'; // AVOID!
8.3 适当使用()和{}来分隔运和E序?
9. 性能有关 (优化代码Q调试,q行)
避免太多的?synchronized 关键?Q?
量使用 StringBuffer 对象Q?
量不要混合使用AWT ?Swing lgQ等{?
下面是一个参考范例?
/*
* @(#)Blah.java 1.82 99/03/18
*
* Copyright (c) 1994-1999 Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
* All rights reserved.
*
* This software is the confidential and proprietary information of Sun
* with Sun.....
*/
package java.blah;
import java.blah.blahdy.BlahBlah;
/**
* Class description goes here.
*
* @version 1.82 18 Mar 1999
* @author Firstname Lastname
*/
public class Blah extends SomeClass {
/* 执行注释. */
/** classVar1 文档注释*/
public static int classVar1;
/**
* classVar2 多于一行的文档注释
* 注释
*/
private static Object classVar2;
/** instanceVar1 文档注释 */
public Object instanceVar1;
/** instanceVar2 文档注释 */
protected int instanceVar2;
/** instanceVar3 文档注释 */
private Object[] instanceVar3;
/**
* ...构造器 Blah 文档注释...
*/
public Blah() {
// ...执行注释 goes here...
}
/**
* ...Ҏ(gu) doSomething 文档注释...
*/
public void doSomething() {
// ...执行注释 goes here...
}
/**
* ...Ҏ(gu) doSomethingElse文档注释..
* @param someParam参数描述
*/
public void doSomethingElse(Object someParam) {
// ...执行注释goes here...
}
}
我现在的环境是eclipse3.2+myeclipse4.0GAQȝ可以打开?jin),不过在打开jsp文g时仍然有问题?br>Unable to create this part due to an internal error. Reason for the failure: Widget is disposed
org.eclipse.swt.SWTException: Widget is disposed
at org.eclipse.swt.SWT.error(SWT.java:3374)
at org.eclipse.swt.SWT.error(SWT.java:3297)
at org.eclipse.swt.SWT.error(SWT.java:3268)
at org.eclipse.swt.widgets.Widget.error(Widget.java:435)
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:330)
at org.eclipse.swt.widgets.Control.setLayoutData(Control.java:2386)
at com.genuitec.eclipse.webdesigner3.design.DesignEditSystem.createDesignView(DesignEditSystem.java:72)
at com.genuitec.eclipse.webdesigner3.WebDesigner3.createDesignView(WebDesigner3.java:73)
at com.genuitec.eclipse.webdesigner3.editors.WebDesignerMultiPageEditor.createDesignView(WebDesignerMultiPageEditor.java:392)
at com.genuitec.eclipse.webdesigner3.editors.WebDesignerMultiPageEditor.createDesignPage(WebDesignerMultiPageEditor.java:364)
at com.genuitec.eclipse.webdesigner3.editors.WebDesignerMultiPageEditor.createPages(WebDesignerMultiPageEditor.java:286)
at org.eclipse.ui.part.MultiPageEditorPart.createPartControl(MultiPageEditorPart.java:276)
at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:596)
at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:372)
at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:566)
at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:290)
at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:140)
at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:268)
at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65)
at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:394)
at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1144)
at org.eclipse.ui.internal.PartStack.setSelection(PartStack.java:1097)
at org.eclipse.ui.internal.PartStack.showPart(PartStack.java:1311)
at org.eclipse.ui.internal.PartStack.add(PartStack.java:455)
at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:102)
at org.eclipse.ui.internal.PartStack.add(PartStack.java:441)
at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:111)
at org.eclipse.ui.internal.EditorSashContainer.addEditor(EditorSashContainer.java:60)
at org.eclipse.ui.internal.EditorAreaHelper.addToLayout(EditorAreaHelper.java:217)
at org.eclipse.ui.internal.EditorAreaHelper.addEditor(EditorAreaHelper.java:207)
at org.eclipse.ui.internal.EditorManager.createEditorTab(EditorManager.java:819)
at org.eclipse.ui.internal.EditorManager.openEditorFromDescriptor(EditorManager.java:718)
at org.eclipse.ui.internal.EditorManager.openEditor(EditorManager.java:679)
at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2586)
at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2521)
at org.eclipse.ui.internal.WorkbenchPage.access$10(WorkbenchPage.java:2513)
at org.eclipse.ui.internal.WorkbenchPage$9.run(WorkbenchPage.java:2498)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2493)
at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2478)
at org.eclipse.ui.ide.IDE.openEditor(IDE.java:388)
at org.eclipse.ui.ide.IDE.openEditor(IDE.java:350)
at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:275)
at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:139)
at org.eclipse.jdt.internal.ui.actions.OpenActionUtil.open(OpenActionUtil.java:49)
at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:190)
at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:174)
at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:267)
at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:243)
at org.eclipse.jdt.internal.ui.packageview.PackageExplorerActionGroup.handleOpen(PackageExplorerActionGroup.java:306)
at org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart$4.open(PackageExplorerPart.java:651)
at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:817)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
at org.eclipse.core.runtime.Platform.run(Platform.java:843)
at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:44)
at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:149)
at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:815)
at org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1069)
at org.eclipse.jface.viewers.StructuredViewer$6.handleOpen(StructuredViewer.java:1168)
at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:249)
at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.java:243)
at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:283)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:928)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3348)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2968)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1914)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1878)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:419)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:95)
at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:78)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336)
at org.eclipse.core.launcher.Main.basicRun(Main.java:280)
at org.eclipse.core.launcher.Main.run(Main.java:977)
at org.eclipse.core.launcher.Main.main(Main.java:952)
|络上搜索得到的信息是myeclipse的版本可能和eclipse存在冲突Q导致myeclipse的jsp面设计器无法正打开Q因此,在国外的论坛上,都徏议还是用eclipse3.0来写jsp?/p>
或者,是不要使用myeclipse的页面设计器Q反正对写代码的言更多是用代码视图)(j)Q因此要jsp的默认打开方式Ҏ(gu)代码试图Q?br>window---->perferences----->General------->editors------>file associations
选择jsp------->选择相应的editor 为default。也是把myeclispe jsp editor 设ؓ(f)defaultQ而不是myeclispe visual jsp editorQ?/p>