2005-6-11
1. 如果配置文件中不写<message-resources parameter="XXXX"/>,<bean:write>死活会报错。
2005-6-13
1. 知道了iterate中奇偶行的取法:
<logic:iterate id="item" indexId="ind" name="saleplanitem">
<% if(ind.intValue()%2==0){%>
<tr bgcolor="#FFFFF9" height=25>
<% } else { %>
<tr bgcolor="#FFFFC9" height=25>
<% } %>
据说写成下面也可以,但我没有试成:
<% request.setAttribute("bgColor", (ind.intValue()%2) == 0 ? "#FFFFF9" : "#FFFFC9"); %>
<tr bgcolor="<c:out value="${bgcolor}"/>" height=25>
2. 知道了如何在input中结合bean:write命名变量
<input type="checkbox" name="pn_<bean:write name="item" property="productNo"/>"
value="<bean:write name="item" property="productNo"/>">
3. 清楚了页面流转的一点思路:
a.jsp->testaction.do->b.jsp
在a.jsp可以<html:link page="/testaction.do">测试一下</html:link>
在配置文件中:
<action path="/testaction" type="plan.testAction" scope="request">
<forward name="OK" path="/b.jsp"/>
</action>
在testAction.java中写:return (mapping.findForward("OK"));
如果在a.jsp要改成用:<html:link forward="test">测试一下</html:link>
则在配置文件中需:<forward name="test" path="/testaction.do"/>
4. 如果用传统的<form,但又要提交到action里,可以这样写
<form action="testaction.do" method="post">
<input type=submit name="SUBMIT" value="测试一下">
</form>
但是,你的这个页面文件要注意路径问题,即使你在<head>中有<html:base/>
你还是需要将<html></html>对改成<html:html></html:html>,尽管使用<html:link>是没有问题。但这里必须这样,否则路径不对。
还有,action里面的前面不要加"/",同样的,如果将<html:link page="/testaction.do">改成传统的<a>,则应该如下写:
<a href="testaction.do">
2005-6-14
1. 在Struts控制器中,不能判断session是否为空,能执行到,session永远不为空.
故如下:
HttpSession session = request.getSession(false);
if(session==null){...}是无效的。
而要判断某个session中的属性值是否有。
2. 标签里面不能嵌套标签,可以用其它等效的东东来解决:
如:<html:link page="/SalePlanItem.do?plan=<bean:write name="sp" property="planNo"/>">
上面是不行的,可将"<html:link page="/"改为:"<a href="即可。(注意:link的page后有/,而href是不需要的.)
当然,一定要用html:link,也可以:
<html:link page="/SalePlanItem.do" paramId="plan" paramName="sp" paramProperty="planNo">
3. 经常犯的错误:
字符串比较是否相等,不能用"==",而只能用"equals"。
"=="比较的是两个对象的地址是否相同,而"equals"才是比较两对象的值是否相等。
2005-6-15
1. 判断checkbox是否选中有两种办法:
a.将checkbox中的name设置为一致,用不同的value。选中了的,会放在一个数组中。
<input type=checkbox name=chk value=1>A
<input type=checkbox name=chk value=2>B
判断所选的值可以用:String[] t = request.getParameterValues("chk");
如果选上了A,则t[0]=1。
b.将checkbox中的name设置为不一致。
<input type=checkbox name=chk1 value=1>A
<input type=checkbox name=chk2 value=2>B
判断是否选中,可以用:String t = request.getParameter("chk1");
如果 t==null 表示没有选上。
2. javaScript的检查办法
var k = 0;
var m = document.getElementsByName("isSelected");
for(var i=0;i<m.length;i++){ if(m[i].checked) k++;}
if(k<1) alert("没有选中一个");
但记录太多时会很慢。
2005-6-16
1. 在Struts的路径方向上,最好不要连续两次用Action,而要与jsp交替一次。
<action path="/showSalePlan" type="plan.showSalePlanAction" scope="request">
<forward name="Success" path="/showSalePlanResult.jsp"/>
</action>
<action path="/genSalePlan" type="plan.genSalePlanAction" scope="request">
<forward name="Success" path="/showSalePlan.do"/>
</action>
<action path="/adjSalePlan" type="plan.adjSalePlanAction" scope="request">
<forward name="Success" path="/showSalePlan.do"/>
</action>
以上会在如下步骤c上系统将得不到响应。
a.welcome.jsp->showSalePlan.do->showSalePlanResult.jsp
b.genSalePlan.do->showSalePlan.do->showSalePlanResult.jsp
c.adjSalePlan.do->showSalePlan.do->showSalePlanResult.jsp
可以写一个jump.jsp,用它来过滤一下。
<logic:forward name="jump"/>
然后配置改为:
<global-forwards>
<forward name="jump" path="/showSalePlan.do"/>
</global-forwards>
<action path="/genSalePlan" type="plan.genSalePlanAction" scope="request">
<forward name="Success" path="/jump.jsp"/>
</action>
<action path="/adjSalePlan" type="plan.adjSalePlanAction" scope="request">
<forward name="Success" path="/jump.jsp"/>
</action>
就是必须要一个Action后一个JSP交替出现。
2. 发现新的好东东:Cocoon (考库)
2005-6-17
1. 今天拿了一个cocoon.war放在Tomcat中,居然不能启动。
2. Web简单的打印:
<iframe name="content" src="print.htm" frameborder=1 scrolling=yes width=600 HEIGHT=400>
</iframe>
<input type=button name="print" value="print"
οnclick='parent.content.document.execCommand("Print", true);'>
2005-6-18
1. 今天想把Hibernate配置起来试试,但最终还是没有成功,可能要到公司上网一步步去学。
2. 将JSF下的一个jsf-cardemo.war放在Tomcat下,终于可以运行起来了。但是,初步感觉JSF的标签不及Struts的标签那么好用,也许JSF还没有入门。
2005-6-19
1. 发现一个工具htmlConverter,它可以将HTML中的Applet标签以Object代替,这样,客户浏览运行时,没有JRE时会自动从SUN站点下载。
它是以插件的形式出现的,JDK自带了demo程序,里面就有。
报表程序能以这种形式做,写一个ActiveXForm,然后就由它来处理行了。
2. 中午在书店里看了一下书,了解目前的一些Java技术:Struts,JSF,Hibernate,Eclipse都能在书店找到相关的书,但Spring好像还没有一本书。
实际上,编程只是软件中很小的一部分,开源的东西多得可以不花一分钱就能把这些组合成产品,所以说,当一个技术人员编程到一定程度,如果不是
搞那些专门而开创性的应用,软件编程已经是次要的了,关键就在于软件项目的规划与全程管理。其次,还应该要去提高某个行业的业务水平。
2005-6-20
1. 今天主要尝试做了一个使用ReportMachine的ActiveXForm,然后放在HTML中运行试看.
<body topMargin=1 leftMargin=1>
<OBJECT id=MyViewer
classid="clsid:B8B82200-9E3E-471B-938A-3B3F38DF86BA"
codebase="/TestProj.cab#version=1,0,0,0"
height=100%
width=100%
/>
如果在IE中,还是可以看得到,但是用Firefox就不能运行了。
ActiveX仍然在IE中,总是会弹出一个安全确认框,后来找了一个解决办法,就是VB中说要实现IObjectSafety安全接口。
2. 如果你不想把WEB放在webapps,可以自己写一个配置文件放在conf/Catalina/localhost下面。
2005-6-21
1. 今天主要是培训,培训时知道:
private String name; // 只是一个变量
public void setName(..) // 定义了属性
public String getName() // 定义了属性
定义属性的那个值在set,get方法中第一个字母是大写,
而它的属性在外面使用时第一个字母小写。实际上变量是可以是其它的。
2. 按网上介绍的做了一个数字签名的过程。
a). 得到.net下的makecert.exe,cert2spc.exe,signcode.exe三个文件.
b). 用makecert制作cert证书,makecert x.cer -sv x.pvk -n "CN=发行者名称" //x.cer,x.pvk是你取的一个空文件名
c). 用cert2spc转换cert证书,cert2spc x.cer x.spc //x.cer是由上面制作出的,x.spc是新的。
d). 运行signcode进行数字签名,然后会弹出界面,要加入.cab的ActiveX文件。
这样,制作的就OK了。
2005-6-23
1. 今天看了一下工作流的开源产品,好像说Jbpm应该是最好的了。
2. 我搞的那个数字签名ActiveX,如果客户端没有.net环境,则会出错,不知道是什么原因?