﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-我在，所以我能</title><link>http://www.blogjava.net/redish/</link><description>我能，所以我在</description><language>zh-cn</language><lastBuildDate>Thu, 23 Apr 2026 22:59:02 GMT</lastBuildDate><pubDate>Thu, 23 Apr 2026 22:59:02 GMT</pubDate><ttl>60</ttl><item><title>Struts 中的　html:options(摘抄)</title><link>http://www.blogjava.net/redish/archive/2006/07/09/57304.html</link><dc:creator>Redish</dc:creator><author>Redish</author><pubDate>Sat, 08 Jul 2006 16:58:00 GMT</pubDate><guid>http://www.blogjava.net/redish/archive/2006/07/09/57304.html</guid><wfw:comment>http://www.blogjava.net/redish/comments/57304.html</wfw:comment><comments>http://www.blogjava.net/redish/archive/2006/07/09/57304.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/redish/comments/commentRss/57304.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/redish/services/trackbacks/57304.html</trackback:ping><description><![CDATA[html:options是Struts中比较复杂的一个tage lib，用法灵活，但是Sturts提供的源码exercise taglib中没有提出常用jsp+ActionForm这样形式的最直接的总结，现从中总结如下，分两种情况：数组和Collection。<br />　　<br />　　需求，要达到：<br />　　&lt;select name="beanCollectionSelect" multiple="multiple" size="10"&gt;<br />　　&lt;option value="value 0"&gt;Label 0&lt;/option&gt;<br />　　&lt;option value="value 1" selected="selected"&gt;Label 1&lt;/option&gt;<br />　　&lt;option value="value 2"&gt;Label 2&lt;/option&gt;<br />　　&lt;option value="value 3" selected="selected"&gt;Label 3&lt;/option&gt;<br />　　&lt;option value="value 4"&gt;Label 4&lt;/option&gt;<br />　　&lt;option value="value 5" selected="selected"&gt;Label 5&lt;/option&gt;<br />　　&lt;option value="value 6"&gt;Label 6&lt;/option&gt;<br />　　&lt;option value="value 7"&gt;Label 7&lt;/option&gt;<br />　　&lt;option value="value 8"&gt;Label 8&lt;/option&gt;<br />　　&lt;option value="value 9"&gt;Label 9&lt;/option&gt;&lt;/select&gt;<br />　　<br />　　要实现上述效果，需要两步：<br />　　第一：设置ActionForm，<br />　　也分两小步：第一小步必须在ActionForm中，有一句<br />　　private Collection beanCollection;<br />　　public Collection getBeanCollection();<br />　　<br />　　Collection beanCollection要确保是一个实现，如ArrayList，如果不是则会报No collection found的错误，Struts的最大不方便就是一旦出问题，定位很难，不知道什么地方使用错误，或忘记设置什么了。<br />　　<br />　　因为前面需求中option的value值和label值不一样，那么在beanCollection中保存的就是一个value和label组成的对象，名为LabelvalueBean，在LabelvalueBean中有两个属性value和label，<br />　　<br />　　在程序某个地方要为beanCollection赋值，如：<br />　　<br />　　Vector entries = new Vector(10);　 <br />　　entries.add(new LabelvalueBean("Label 0", "value 0"));　　　　　<br />　　entries.add(new LabelvalueBean("Label 1", "value 1"));　　　　　<br />　　entries.add(new LabelvalueBean("Label 2", "value 2"));　　　　　<br />　　entries.add(new LabelvalueBean("Label 3", "value 3"));　　　　　<br />　　entries.add(new LabelvalueBean("Label 4", "value 4"));　　　　　　<br />　　entries.add(new LabelvalueBean("Label 5", "value 5"));　　　　　 <br />　　 entries.add(new LabelvalueBean("Label 6", "value 6"));　　　　　　<br />　　entries.add(new LabelvalueBean("Label 7", "value 7"));　　　　　　<br />　　entries.add(new LabelvalueBean("Label 8", "value 8"));　　　　　　<br />　　entries.add(new LabelvalueBean("Label 9", "value 9"));<br />　　<br />　　然后执行setBeanCollection(entries);<br />　　这样ActionForm中的beanCollection算有值了。<br />　　第二小步，需要设置Selected，selected有两种，单选和多选：<br />　　在ActionForm中必须有：<br />　　<br />　　private String singleSelect = "Single 5";　 <br />　　public String getSingleSelect()<br />　　 {<br />　　　　　return (this.singleSelect);<br />　　　　}　 <br />　　public void setSingleSelect(String singleSelect)<br />　　 {<br />　　　　　this.singleSelect = singleSelect;<br />　　　　}<br />　　<br />　　或多选，多选必须是数组：<br />　　<br />　　private String[] beanCollectionSelect = { "value 1", "value 3",<br />　　　　　　　　　　　　　　　　　　　　　　　　　"value 5" };　<br />　　public String[] getBeanCollectionSelect() {<br />　　　 return (this.beanCollectionSelect);　　}<br />　　　　public void setBeanCollectionSelect(String beanCollectionSelect[])<br />　　 {<br />　　　　　　this.beanCollectionSelect = beanCollectionSelect;<br />　　　　}<br />　　<br />　　第二：在Jsp中写入tang lib语句如下：<br />　　<br />　　&lt;html:select property="beanCollectionSelect" size="10" multiple="true"&gt;<br />　　　　　　&lt;html:optionsCollection name="testbean" property="beanCollection"/&gt;　　<br />　　 &lt;/html:select&gt;<br />　　<br />　　其中testbean是ActionForm的名称。<br />　　<br />　　以上是html:options的Collection解决方案，如果option值很少，简单地可以实现为数组，两步：<br />　　第一：在ActionForm中，<br />　　<br />　　private String values[] =<br />　　　　 { "Magazine", "Journal", "News Paper","Other" };　 <br />　　private String labels[] =<br />　　　　 { "L-Magazine", "L-Journal", "L-News Paper","L-Other"};<br />　　　　private String selected = "Magazine";　　<br />　　public String getSelected()<br />　　{<br />　　　　　return selected;<br />　　　　}　　<br />　　public void setSelected(String selected)<br />　　{<br />　　　　　this.selected = selected;<br />　　　　}　 <br />　　public String[] getvalues()<br />　　{<br />　　　　　return values;<br />　　　　}　　<br />　　public void setvalues(String[] values)<br />　　{　　　this.values = values;<br />　　　　}　 <br />　　public String[] getLabels()<br />　　{<br />　　　　　return values;<br />　　　　}　　<br />　　public void setLabels(String[] labels)<br />　　{<br />　　　　　this.labels = labels;<br />　　　　}<br />　　<br />　　第二步在jsp中：<br />　　<br />　　&lt;html:select property="selected" &gt;　　　　　 <br />　　&lt;html:options name="testbean" property="values" labelProperty="label"/&gt;　　　&lt;/html:select&gt;<br />　　<br />　　Struts标签库的使用还是需要小心，不必完全使用Struts的标签库，个人感觉Struts这种替代Html语句的标签库有一种牵强附会，给使用者掌握带来难度，使用者除熟悉html外，还必须理解Struts的对应标签库用法，而且这种调试出错，问题也无法准确定位，总是抽象地告诉你，no bean 或no form <img src ="http://www.blogjava.net/redish/aggbug/57304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/redish/" target="_blank">Redish</a> 2006-07-09 00:58 <a href="http://www.blogjava.net/redish/archive/2006/07/09/57304.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中文转码Filter</title><link>http://www.blogjava.net/redish/archive/2006/07/08/57254.html</link><dc:creator>Redish</dc:creator><author>Redish</author><pubDate>Sat, 08 Jul 2006 07:21:00 GMT</pubDate><guid>http://www.blogjava.net/redish/archive/2006/07/08/57254.html</guid><wfw:comment>http://www.blogjava.net/redish/comments/57254.html</wfw:comment><comments>http://www.blogjava.net/redish/archive/2006/07/08/57254.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/redish/comments/commentRss/57254.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/redish/services/trackbacks/57254.html</trackback:ping><description><![CDATA[
		<p>在Struts中经常会碰到中文转码的问题，最简单的办法就是直接写一个ServletFilter<br />代码如下：<br />ChineseFilter.class<br /><br /><br />import java.io.IOException;<br />import javax.servlet.Filter;<br />import javax.servlet.FilterChain;<br />import javax.servlet.FilterConfig;<br />import javax.servlet.ServletException;<br />import javax.servlet.ServletRequest;<br />import javax.servlet.ServletResponse;<br />import javax.servlet.http.HttpServlet;<br />import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;</p>
		<p>public class ChineseFilter extends HttpServlet implements Filter {</p>
		<p> private FilterConfig filterConfig;<br />     //Handle the passed-in FilterConfig<br />     public void init(FilterConfig filterConfig) throws ServletException {<br />         this.filterConfig = filterConfig;<br />     }<br />     //Process the request/response pair<br />     public void doFilter(ServletRequest request, ServletResponse response,<br />                          FilterChain filterChain) {<br />         try {<br />          <br />          <u>String encoding=filterConfig.getInitParameter("encoding");//</u>从WEB.xml配置文件中取出参数，这样我们可以通过配置修改编码格式．                  <br />             <u>request.setCharacterEncoding(encoding);//</u>设置请求的编码格式<br />             filterChain.doFilter(request, response);<br />         } catch (ServletException sx) {<br />             filterConfig.getServletContext().log(sx.getMessage());<br />         } catch (IOException iox) {<br />             filterConfig.getServletContext().log(iox.getMessage());<br />         }<br />     }</p>
		<p>     //Clean up resources<br />     public void destroy() {<br />     }</p>
		<p>  protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {<br />   // TODO Auto-generated method stub<br />   super.doGet(arg0, arg1);  <br />  }</p>
		<p>  protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {<br />   // TODO Auto-generated method stub<br />   super.doPost(arg0, arg1);   <br />  } <br />}<br /><br />写完过滤器剩下的就是配置Web.xml了<br /><br /> &lt;filter&gt;<br />  &lt;filter-name&gt;ChineseFilter&lt;/filter-name&gt;<br />  &lt;filter-class&gt;com.blog.filter.ChineseFilter&lt;/filter-class&gt;<br />&lt;init-param&gt;<br /><font style="BACKGROUND-COLOR: #ffff00">    &lt;param-name&gt;encoding&lt;/param-name&gt;<br />    &lt;param-value&gt;GBK&lt;/param-value&gt;　配置编码格式，可以配置成你想要的编码（GBK,bg-2312）</font><br />&lt;/init-param&gt;<br />  &lt;/filter&gt;<br />   &lt;filter-mapping&gt;<br />    &lt;filter-name&gt;ChineseFilter&lt;/filter-name&gt;<br />    &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />  &lt;/filter-mapping&gt;</p>
		<p>好了，简单的Filter就完成了．当然也有现成的包，比如你用Struts+Spring的话，那Spring中就有现成的转码过滤器，我们只要在WEB．xml中配置一下就OK了．<br /><br />＜filter＞<br />＜filter-name＞encodingFilter＜/filter-name＞<br /> ＜filter-class＞org.springframework.web.filter.CharacterEncodingFilter＜/filter-class＞<br /> ＜init-param＞<br /> ＜param-name＞encoding＜/param-name＞<br />. ＜param-value＞GBK＜/param-value＞<br /> ＜/init-param＞<br /> ＜/filter＞<br />＜filter-mapping＞<br /> ＜filter-name＞encodingFilter＜/filter-name＞<br /> ＜url-pattern＞/*＜/url-pattern＞<br /> ＜/filter-mapping＞<br /></p>
<img src ="http://www.blogjava.net/redish/aggbug/57254.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/redish/" target="_blank">Redish</a> 2006-07-08 15:21 <a href="http://www.blogjava.net/redish/archive/2006/07/08/57254.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring 编程入门十大问题解答</title><link>http://www.blogjava.net/redish/archive/2006/07/05/56631.html</link><dc:creator>Redish</dc:creator><author>Redish</author><pubDate>Tue, 04 Jul 2006 18:54:00 GMT</pubDate><guid>http://www.blogjava.net/redish/archive/2006/07/05/56631.html</guid><wfw:comment>http://www.blogjava.net/redish/comments/56631.html</wfw:comment><comments>http://www.blogjava.net/redish/archive/2006/07/05/56631.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/redish/comments/commentRss/56631.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/redish/services/trackbacks/56631.html</trackback:ping><description><![CDATA[
		<p>
		</p>
		<table cellspacing="0" cellpadding="0" width="730" border="0">
				<tbody>
						<tr>
								<td style="BORDER-RIGHT: #e8e8e8 1px solid; BORDER-LEFT: #e8e8e8 1px solid" align="middle" bgcolor="#f9f9f9" colspan="3">
										<table style="WORD-BREAK: break-all" cellspacing="0" cellpadding="0" width="700" align="center" border="0">
												<tbody>
														<tr bgcolor="#f9f9f9">
																<td align="middle" height="30">作者：佚名    来自：未知</td>
														</tr>
														<tr bgcolor="#f9f9f9">
																<td id="fontzoom" style="LINE-HEIGHT: 200%">
																		<p>
																				<em>版权声明：如有转载请求，请注明出处：</em>
																				<a href="http://blog.csdn.net/yzhz">
																						<font color="#000080">
																								<em>http://blog.csdn.net/yzhz</em>
																						</font>
																				</a>
																				<br />
																				<br />1、如何学习Spring？<br />你可以通过下列途径学习spring：<br />(1) spring下载包中doc目录下的MVC-step-by-step和sample目录下的例子都是比较好的spring开发的例子。</p>
																		<p>(2) AppFuse集成了目前最流行的几个开源轻量级框架或者工具Ant,XDoclet,Spring,Hibernate(iBATIS),JUnit,Cactus,StrutsTestCase,Canoo's WebTest,Struts Menu,Display Tag Library,OSCache,JSTL,Struts 。<br />你可以通过AppFuse源代码来学习spring。<br />AppFuse网站：<a href="http://raibledesigns.com/wiki/Wiki.jsp?page=AppFuse">http://raibledesigns.com/wiki/Wiki.jsp?page=AppFuse</a></p>
																		<p>(3)Spring 开发指南(夏昕)（<a href="http://www.xiaxin.net/Spring_Dev_Guide.rar">http://www.xiaxin.net/Spring_Dev_Guide.rar</a>）<br />一本spring的入门书籍,里面介绍了反转控制和依赖注射的概念，以及spring的bean管理，spring的MVC，spring和hibernte，iBatis的结合。</p>
																		<p>(4) spring学习的中文论坛<br />SpringFramework中文论坛(<a href="http://spring.jactiongroup.net/">http://spring.jactiongroup.net</a>)<br />Java视线论坛(<a href="http://forum.javaeye.com/">http://forum.javaeye.com</a>)的spring栏目</p>
																		<p>2、利用Spring框架编程，console打印出log4j:WARN Please initialize the log4j system properly？<br />说明你的log4j.properties没有配置。请把log4j.properties放到工程的classpath中，eclipse的classpath为bin目录，由于编译后src目录下的文件会拷贝到bin目录下，所以你可以把log4j.properties放到src目录下。<br />这里给出一个log4j.properties的例子：</p>
																		<p>log4j.rootLogger=DEBUG,stdout<br />log4j.appender.stdout=org.apache.log4j.ConsoleAppender<br />log4j.appender.stdout.layout=org.apache.log4j.PatternLayout<br />log4j.appender.stdout.layout.ConversionPattern=%d %5p (%F:%L) - %m%n</p>
																		<p>
																				<br />3、出现 java.lang.NoClassDefFoundError?<br />一般情况下是由于你没有把必要的jar包放到lib中。</p>
																		<p>比如你要采用spring和hibernate（带事务支持的话），你除了spring.jar外还需要hibernat.jar、aopalliance.jar、cglig.jar、jakarta-commons下的几个jar包。</p>
																		<p>
																				<a href="http://www.springframework.org/download.html">http://www.springframework.org/download.html</a>下载spring开发包，提供两种zip包<br />spring-framework-1.1.3-with-dependencies.zip和spring-framework-1.1.3.zip，我建议你下载spring-framework-1.1.3-with-dependencies.zip。这个zip解压缩后比后者多一个lib目录，其中有hibernate、j2ee、dom4j、aopalliance、jakarta-commons等常用包。<br /></p>
																		<p>4、java.io.FileNotFoundException: Could not open class path resource [....hbm.xml],提示找不到xml文件？<br />原因一般有两个：<br />(1)该xml文件没有在classpath中。<br />(2)applicationContext-hibernate.xml中的xml名字没有带包名。比如：<br />&lt;bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"&gt;<br />        &lt;property name="dataSource"&gt;&lt;ref bean="dataSource"/&gt;&lt;/property&gt;<br />        &lt;property name="mappingResources"&gt;<br />            &lt;list&gt;<br />                &lt;value&gt;User.hbm.xml&lt;/value&gt;         错，改为： &lt;value&gt;com/yz/spring/domain/User.hbm.xml&lt;/value&gt;<br />            &lt;/list&gt;<br />        &lt;/property&gt;<br />        &lt;property name="hibernateProperties"&gt;<br />         &lt;props&gt; <br />         &lt;prop key="hibernate.dialect"&gt; net.sf.hibernate.dialect.MySQLDialect &lt;/prop&gt; <br />         &lt;prop key="hibernate.show_sql"&gt;true&lt;/prop&gt; <br />        &lt;/props&gt; <br />        &lt;/property&gt;<br />&lt;/bean&gt;</p>
																		<p>
																				<br />5、org.springframework.beans.NotWritablePropertyException: Invalid property 'postDao' of bean class？<br />出现异常的原因是在application-xxx.xml中property name的错误。<br />&lt;property name="...."&gt; 中name的名字是与bean的set方法相关的，而且要注意大小写。<br />比如<br />public class PostManageImpl extends BaseManage implements PostManage {<br />    private PostDAO dao = null;<br />    public void setPostDAO(PostDAO postDAO){<br />        this.dao = postDAO;<br />    }<br />}<br />那么xml的定义应该是：<br />&lt;bean id="postManage" parent="txProxyTemplate"&gt;<br />        &lt;property name="target"&gt;<br />            &lt;bean class="com.yz.spring.service.implement.PostManageImpl"&gt;<br />                &lt;property name="postDAO"&gt;&lt;ref bean="postDAO"/&gt;&lt;/property&gt;    对<br />                &lt;property name="dao"&gt;&lt;ref bean="postDAO"/&gt;&lt;/property&gt;             <font style="BACKGROUND-COLOR: #ff0000">错<br /></font>            &lt;/bean&gt;<br />        &lt;/property&gt;<br />&lt;/bean&gt;<br /></p>
																		<p>6、Spring中如何实现事务管理？<br />        首先，如果使用mysql，确定mysql为InnoDB类型。<br />        事务管理的控制应该放到商业逻辑层。你可以写个处理商业逻辑的JavaBean，在该JavaBean中调用DAO，然后把该Bean的方法纳入spring的事务管理。<br /><br />比如：xml文件定义如下：<br />&lt;bean id="txProxyTemplate" abstract="true"<br />        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"&gt;<br />        &lt;property name="transactionManager"&gt;&lt;ref bean="transactionManager"/&gt;&lt;/property&gt;<br />        &lt;property name="transactionAttributes"&gt;<br />            &lt;props&gt;<br />                &lt;prop key="save*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;<br />                &lt;prop key="remove*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;<br />                &lt;prop key="*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;<br />            &lt;/props&gt;<br />        &lt;/property&gt;<br />&lt;/bean&gt;</p>
																		<p>&lt;bean id="userManage" parent="txProxyTemplate"&gt;<br />      &lt;property name="target"&gt;<br />          &lt;bean class="com.yz.spring.service.implement.UserManageImpl"&gt;<br />              &lt;property name="userDAO"&gt;&lt;ref bean="userDAO"/&gt;&lt;/property&gt;<br />          &lt;/bean&gt;<br />      &lt;/property&gt;<br />&lt;/bean&gt;</p>
																		<p>com.yz.spring.service.implement.UserManageImpl就是我们的实现商业逻辑的JavaBean。我们通过parent元素?/span&gt; </p>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
						<tr>
								<td width="10" height="11">
										<img height="11" src="http://www.javafan.net/article/images/u_16.gif" width="10" />
								</td>
								<td style="BORDER-BOTTOM: #e8e8e8 1px solid" width="695" bgcolor="#f9f9f9" height="11">
										<img height="1" src="" width="1" />
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/redish/aggbug/56631.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/redish/" target="_blank">Redish</a> 2006-07-05 02:54 <a href="http://www.blogjava.net/redish/archive/2006/07/05/56631.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>