===========================================================
version 3.1
===========================================================

1. ANṼpXjspn܂pXw肷ƃZbV쐬Ă܂
悤ȌۂoB()
2. BeanToXmlDocumentABeanToJsonDocumentPOJOċAIɉ͂鏈ǉ
3. Log̓t[eCgŃNXǉ
4. XMLHttpObjectresXml擾łȂ
LayoutFilterɂXMLX|XContentType㏑Ă܂ۂC

+------------------------------------------------------------------------------+
ȂMɊւĂAXMLHttpRequestIuWFNgł̂́AUTF-8ɌB
̂ߓ{ꂪ܂܂Ă̂ł΁AUTF-8ɕϊKvB
Content-Typetext/xmlɐݒ肵YƁANCAg̃XNvgł́A
responseXMLvpeB̖߂lƂDocumentIuWFNg擾łȂƂoĂB
+------------------------------------------------------------------------------+

5. Validatio@\ǉ
NGXgp[^̓̓`FbNweber-config.xmlɎw\B
ŗL̓̓`FbN͏]ǂAAction.doValidate()Ɏ

6. GET\bhp̒ӓ_
setCharacterEncoding\bh̗pɂ1_ӂׂ_́AtH[̃f[^M
GET\bhpƂ̐U镑WebRei̎ˑł邱ƂB
ႦΈȉ̂悤JSPy[WlĂ݂悤B

<%@ page language="java" contentType="text/html;
 charset=Windows-31J" %>

<html>
<head><title>eXg</title></head>
<body>

<form action="test.jsp" method="GET">
  <input type="textbox" name="msg">
  <input type="submit" value="Send">
</form>

<%
    request.setCharacterEncoding("Windows-31J");
    out.print(request.getParameter("msg"));
%>

</body>
</html> 

@JSPy[WŒӂĂ_́AtH[̑M\bhƂGET
w肵Ă_B
@ătH[̃p[^́AHTTPNGXgE{fBł͂ȂAURĨNG
ʂăT[ubgEReiɑMB

Tomcat 4.1.31̏ꍇALR[h͖Ȃ{ƂłB
Tomcat 4.1.31ł͖Ȃ{ꂪ\ 

ATomcat 5.0.28ł́AƂ܂JSPy[WŁAp[^̕
Ă܂B
Tomcat 5.xłGETɂMp[^ɑ΂āAsetCharacterEncoding
\bh̕R[huKpȂvƂdlύXȂĂ̂łB

Tomcat 5.xɂĂ̖ɂ́ARei̐ݒt@C
server.xmlConnectorvfɂāAuseBodyEncodingForURI
ȉ̂悤Ɏw肷΂悢B

<Connector 
port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000" 
disableUploadTimeout="true" useBodyEncodingForURI="true"/>  

WebuEȖ́AWeby[WƓR[hŃNG쐬A
ɑ΂URLGR[fBOi%xx`j{WebT[oɑMB
A

7.GET̕Ή2
Tomcat 5.xɂdlύX́Ã[D悵̂Ȃ̂ł
iȂ݂ɁAN4GoogleɂNG̃ftHgR[h
UTF-8ɕύXA̃^uuEUŕ̂A
Ɠl̎ɂ̂jB

Tomcat5.xAFORMGET\bhŃp[^𑗐MꍇA
setCharacterEncoding\bh𖳎悤ɂȂ܂B
POST\bh̏ꍇ͗LłB 
GET\bh̏ꍇAserver.xmlt@C<connector>^OuseBodyEncodingForURI
trueɎw肷邱ƂŁAsetCharacterEncoding\bhLɂł܂B  
 <Connector port="8080" maxThreads="150"
           minSpareThreads="25" maxSpareThreads="75"
           enableLookups="false" redirectPort="8443"
           acceptCount="100" debug="0" 
           connectionTimeout="20000" disableUploadTimeout="true"
           useBodyEncodingForURI="true" />
8. WeberTestCasepP̃eXgNXs
MockGeneralFormNXHttpServletRequestNXClassNotFoundException
oĂ܂ۂC

9. WeberTestCasepP̃eXgNXs
ActionBucketNXHttpServletRequestNXClassNotFoundException
oĂ܂ۂC
(1) ActionBucketNXC^[tF[XɕύX
(2) ActionBucketNXActionBucketImplNXɕύX

===========================================================
version 3.1.1
===========================================================
1. X^bNƃ[XɂāiUnknow Source)o錻ۂC
>javacȂ
>javac -g ]X
>
>antȂ
>debug="on" optimize="off"

ȂقǁBB
ǂAUnknown SourceɂȂȁAƎvĂ̂łAANT
ftHgdebug="off"ɂȂĂ܂ˁB

2. `FbN{bNX̕`FbÑoO(fO)C
3. XHTML^ÕJX^^O`s悤ɂ
iJ_[\Tvǉj

===========================================================
version 3.1.2
===========================================================
1. HtmlWriteTagConverterǉ

===========================================================
version 3.1.3
===========================================================
1. `t@C̒``Ƀ\[gĕێ悤
C

===========================================================
version 4.0 b1
===========================================================
1. tH[h̕ύX
1-1. F؃G[RoleExceptionX[悤ύX
iglobal-exceptionŔF؃G[̑JڐURLw肷
ɕύX)
1-2  F̖ؐ߂lύX
iύXO)org.itscool.weber.action.ROLE_SUCCESS
iύX)success
1-3 ̓G[̖߂lύX
iύXO)org.itscool.weber.action.INPUT_ERROR
iύX)error

3. org.itscool.commons.connection.ConnectionMangerC^[tF[X
org.itscool.weber.user.RoleManagerC^[tF[XisInit\bh
ǉ

4. org.itscool.weber.action.Action.doValidate()̖߂l
voidStringɕύX

5. org.itscool.stylist.controller.HtmlServlet
xhtmlt@C̃wb_<?xml version="1.0" encoding="Shift_JIS" ?>Lq
ꍇ̓ftHg<?xml version="1.0" encoding="Shift_JIS" ?>t
悤ɏCiGR[h͒`t@C擾)

6. NXύX
org.itscool.weber.user.UserRoleDao->org.itscool.weber.user.RoleDao
org.itscool.commons.dao.DaoInfo->org.itscool.commons.dao.EntityInfo
org.itscool.commons.dao.DaoInfoMapping->org.itscool..commons.dao.EntityInfoMapping
org.itscool.weber.user.RoleManger->org.itscool.weber.user.UserManger
org.itscool.weber.user.RoleDbManger->org.itscool.weber.user.UserEntityManger
org.itscool.weber.user.UserRole->org.itscool.weber.user.Role

8. NXړ
org.itscool.stylist.filter.*->org.itscool.stylist.controller.*
org.itscool.weber.action.FrontServlet->org.itscool.weber.controller.FrontServlet
org.itscool.weber.action.Globals->org.itscool.weber.controller.Globals
org.itscool.commons.bean.InitParamMap->org.itscool.commons.collection.InitParamMap

9. NXp~
org.itscool.weber.user.RoleFileManager
org.itscool.weber.user.CreateUser
org.itscool.weber.user.UserUtil
org.itscool.weber.user.CreateUser
org.itscool.weber.tagexpbP[Wiweber-tag.tldyweb.xmlJX^^O`폜)

10. NXǉ
org.itscool.weber.controller.FrontServlet4x
org.itscool.weber.controller.RequestDispatcher
org.itscool.weber.controller.RequestDispatchException
org.itscool.weber.mapping.RequestMappings

11. [UNXANX̃}bsOe[uύX
WEBER_USER -> USERe[u
WEBER_ROLE -> USER_ROLEe[u
WEBER_AUTONUMBER -> AUTO_NUMBERe[u

12. org.itscoo.commons.daopbP[W
DATETIME,TIMESTAMP^Ή

13. yϓIbNiLOCK_VERSION)AŏIXViUPDATE_DT)Zbg@\ǉ
e[ũtB[hLOCK_VERSION()ǉ邱ƂŁAyϓIbNs
e[ũtB[hUPDATE_DTiDATETIME/TIMESTAMP)ǉ邱ƂŁA
ŏIXVŃZbg܂

14. ŏIXV̎Zbgǉ
e[ũtB[hUPDATE_DT݂ꍇAINSERT/UPDATE
VXetZbg(tB[h^CvDATETIME/TIMESTAMP)

15. _폜@\
DELETE_FG(^)Ř_폜s
DELETE_DT(DATETIME/TIMESTAMP)݂ꍇ͘_폜̓tZbg

99. oOC
(1) org.itscool.stylist.io.HtmlWriteTagConverter.convert()
NullPointerExceptionC
(2) org.itscool.stylist.tag.LayoutRegex.parseObj()
NullPointerExceptionC
(3) org.itscool.commons.connection.JdbcConnectionManager,DataSourceConnectionManager
getTransaction()AreleaseTransaction()Ainit()Adestroy()synchronizedubN
ǉ

===========================================================
version 4.0 b2 / b3 
===========================================================

99. oOC
(1) org.itscool.commons.dao.FieldMap
tŎ24Hŏo͂悤C
(2) org.itscool.stylist.controller.HtmlLayoutServlet4_xǉ
CAEgKx[Xō쐬@\ǉ
(3) org.itscool.commons.util.URLDecodeUtilNXfilter\bh
u"(_uNH[e[V)v̕ϊ@ɌC
(4) FireFoxŃt@C]łȂۂC


===========================================================
version 4.0 b4
===========================================================
1. EL֐ΉyуJX^EL֐@\ǉ
2. org.itscool.weber.user.UserEntityManagerNX̃[Uo^n
̃\bh񐄏ɕύX

99. oOC
(1) org.itscool.layout.controller.HtmlLayoutServlet4_x
̃CAEgƕpƁAFileNotExceptiono錻ۂC
(2) ÍꂽpX[hɂ郆[UF؂Ɏs錻ۂC
(3) XHTML̃p[XG[T[ubgɕԂ悤ɏC
(4) lock_versionNull̂ƂAXVłȂۂC

===========================================================
version 4.0
===========================================================
(1) EL֐ǉ
(2) oCi^̃tB[he[uɑ΂SQL͌_ŕs
(3) org.itscool.commons.BeanUtilsetPropertyAgetProperty\bh
z񃁃oΉǉ
(4) org.itscool.weber.testcase.WeberTestCaseC

 TransactionCX^X̏PreparedStatementɒuKvB
1: connection.setAutoCommit(false);
2:  
3: String sql="insert into product_photo values(?,?)";
4: PreparedStatement statement=connection.prepareStatement(sql);
5:   
6: statement.setInt(1,104);
7: File file=new File("/tmp/myphoto.jpg");
8: FileInputStream input=new FileInputStream(file);
9: statement.setBinaryStream(2,input,(int)file.length());
10:statement.executeUpdate();
11:connection.commit();

===========================================================
version 4.0.1
===========================================================
(1) InitParam̏icreateInstance())init\bhȊOŌĂяoĂ
ӏgetInstanceɏC

org.itscool.stylist.controller.HtmlLayoutServlet
org.itscool.stylist.controller.HtmlLayoutServlet4_x
org.itscool.weber.controller.FrontServlet
org.itscool.weber.controller.FrontServlet4_x
org.itscool.weber.controller.ActionBucketImpl
org.itscool.stylist.io.HtmlAttributeConverter
org.itscool.stylist.io.HtmlTextConverter

(2) ActiondoValidateɂRET_NOFORWARDԂꍇ́A
G[ʂɑJڂȂ悤C

(3) org.itscool.weber.controller.ActionBucket, ActionBucketImpl
ȉ̃\bhǉ
/**
 * p[^Ŏw肳ꂽBeanToXMLhLgo͂܂
 * @param document BeanToXMLhLg
 * @throws Exception
 */
public void printXml(BeanToXmlDocument document) throws Exception;

/**
 * p[^Ŏw肳ꂽIuWFNgXMLŏo͂܂
 * @param bean IuWFNg
 * @param rootName IuWFNg̃[gvf
 * @throws Exception
 */
public void printXml(Object bean, String rootName) throws Exception;

99 oOC
(1) org.itscool.commons.document.DocumentBeanParser
parseBean\bh̎sNullPointerException錻ۂC

===========================================================
version 4.0.2
===========================================================
99 oOC
(1) org.itscool.commons.bean.BeanFactory
    org.itscool.commons.document.XmlConfigReader
œ{ꂪ錻ۂC
(2) org.itscool.weber.testcase.WeberDbTestCase
EnitityInfoMappingCX^X鏈ǉ
iMySQLł̒P̃eXgɎs錻ۂC)
(3) org.itscool.commons.dao.Criteria
mysqlgpLIMIT̕sC
(4) org.itscool.stylist.function.DateC
NULL`FbNǉ
(5) org.itscool.stylist.io.HtmlTextConverterXSSΉ
izgɏĂ肪㌟vj
(6) org.itscool.commons.dao.Criteria
toUpdateStringiXVSQL쐬j̓t^iDate)f[^String
ŏĂ܂ۂC
===========================================================
version 4.0.3
===========================================================
(1) `FbN{bNXAIvV{bNXEL̓WJǉ
(2) OCɎsƂorg.itscool.weber.user.RoleException
gorg.itscool.weber.action.LoginFailedExceptionԂ悤ɂ
(3) org.itscool.stylist.HtmlLayoutServlet4x.setIncludeContents()
CAEg̋KɎw肳ꂽt@Cꍇ́AException
X[AʂɃbZ[W\悤C

(99) oOC
Eorg.itscool.stylist.el.BaseElRegex.java
  replaceFunction(),replaceEl()ɂNULL`FbNǉ
Eorg.itscool.stylist.io.HtmlConfigReader.java
  parseControlAttribute()ɂtitle"w_kind"vfꍇ
  𔲂悤C

 Weber^O̎ʎqtitlegƂɂ
HTMLtitleic[`bv̕\Ɏg)ƏdĂ邽߁A
Webertitlew肷ƃc[`bv̕\sȂ

j
 <input title="w_kind=address:w_property=name" type="text" name="name"/>

Ή@ƂāAw_kindAw_propertyinput^O̗vfƂĎgp

 <input title="c[`bv" w_kind="address" w_property="name" type="text" name="name"/>

 Weber^O̎ʎq"title"͏Iɔp~\

===========================================================
version 4.0.4
===========================================================
(99) oOC
SELECT OPTIONiCHECKBOCX)^ȎOlێ̏C

@m̃oO
ExceptionMappings4x̗O`MapŕێĂ邽߁A
O̗D揇΂΂ɂȂĂ܂

===========================================================
version 4.0.5
===========================================================
(1) PrepareStatement擾ǉ(getPrepareStatement())
AConnectionManagerŐꂽConnectionCX^XgĂꍇ
PrepareStatement̃N[YConnectionN[YɎI
sB

org.itscool.commons.connection.Transaction
org.itscool.commons.connection.TransactionUtil

(2) org.itscool.commons.connection.TransactionUtil
getPreparedStatement\bhAgetPreparedStatementWrapper\bhǉ

 PreparedStatement\bhPremaredStatement擾郁\bhŁA
getPreparedStatementWrapper\bhPremaredStatementWrapper擾郁\bhB
PremaredStatementWrapper͊ȈO/R}bsOi@\ǉĂ\j
ĂB

 (1)A(2)̑Ή́Adao@\܂ɂnシ邽߂
bIɒǉ

(3) CriteriaCX^X̏\bḧe[ũJ
JavaBeans̃vpeBɕύX
iJavaBeans̃vpeBƃJ̃}bsOCriteria
sj

(4) JavaBeansɎw肷vpeBƃJ̊֘A`萔iPK_COLUM_xxxA
COLUM_xxxj̎w肪ȗł悤ɂȂ܂B
iAOQƂw肷ꍇFK_COLUM̎w͕K{j

(99) org.itscool.commons.dao.RecordMapFactory
EJ̑啶ʂĂ܂ۂC
EÕy[WJڂ̕sC

@m̖
(1) OR}bsO̊֘A11̂
(2) tB[h̒`₱
(3) SQL̏̎w@GEʓ|
SQL𒼐ڏIŕ₷H

===========================================================
version 4.0.6
===========================================================
(1) org.itscool.stylist.io.CompareTagConverter
Ew_value2vfǉ
@(rñ^Ow_valuew_value2ɂrs悤ɂ)

(99) oOC
Eorg.itscool.commons.utilServletTagUtil.findValue()\bh
NullPointerException錻ۂC
Eorg.itscool.commons.util.StringUtil 187s
cnvUpperNameToUnderScoreName()
jif( i < len && Character.isUpperCase(chars[i+1])){
jif( (i+1) < len && Character.isUpperCase(chars[i+1])){

jtB[h̍Ōオ_XiA_[XRǍ̕1)
̏ꍇɁA錻ۂC

===========================================================
version 4.0.7
===========================================================
(1) ia̒`NO_MAP_COLUM_vpeBǉ
̍ڂɒ`ꂽvpeB̓e[ũJ}bsO
O

(2) org.itscool.commons.BeanUtil setProperty()
_f[^𐮐^ϐɃZbgłȂۂCB
_̃f[^琮^̕ϐɃZbgꍇA
^Ƀ_ELXgĂZbg悤C

(3) org.itscool.stylist.function.DateC.format()
sȓtf[^w肳ꂽꍇ́AVXeto͂悤
C

(99)oOC
Enull^OAisnotnull^O]ȂsC
EvalueElƕgݍ킹ꍇA񕔕
o͂ȂiEL̕]ʂ݂̂o͂)ۂC

===========================================================
version 4.0.8
===========================================================
(1) org.itscool.commons.dao,PreparedStatementWrapper.createBean()
sql^CvJava^Cvɕϊ鏈ǉ
java.sql.Date -> java.util.Date
java.sql.Timestamp -> java.util.Date
java.sql.Blob -> java.io.InputStream/byte[]
java.sql.Clob -> java.io.Reader/String

(2) org.itscool.stylist.function.DateC.format()
sȓtf[^w肳ꂽꍇ́A󕶎("")o͂悤
C

(3) Action̖߂l"W[/ʖ"w肷邱Ƃɂ
ʃW[̉ʂɑJڂ@\ǉ

(4)̖O̃NGXgp[^IuWFNg̃Xg/
zɃ}bsO@\ǉ

@@tH[IuWFNgXgŎ擾ꍇ
<input type="hidden" name="bean_maped_kind" value="list"/>

A@tH[IuWFNgzŎ擾ꍇ
<input type="hidden" name="bean_maped_kind" value="array"/>

(5) org.itscool.commons.logging.AbstractLog
pbP[WANXPʂ̃Oo͂̎w̕sC
pbP[WANXPʂɃȌo͂w肵ꍇ́Adi-config.xml
ȉ̋Lqǉ

<!-- MO[eBeB -->
<bean id="Log" type="org.itscool.commons.logging.SimpleLog" singleton="true">
    <property name="level" value="trace"/>
    <property name="mode" value="disp"/>
    <!-- traceOo͂̎w -->
    <!-- tracesɎw肳ĂNX̃Ô݂o͂ -->
    <property name="traces" collection="list">
        <bean id="pattern" value="org.itscool.weber.controller.FrontServletListener"/>
    </property>
    <!-- debugOo͂̎w -->
    <!-- vfw肷ƁÃx̃O͏o͂Ȃ -->
    <property name="debugs" collection="list"></property>
    <!-- infoȏ̃O͏o͂̂ŃOo͂̎w͋LqȂ  -->
</bean>

===========================================================
version 4.0.9
===========================================================

(1)̖O̃NGXgp[^IuWFNg̃Xg/
zɃ}bsO@\(oOC)
EʁiWEB)ŒP̃f[^̏ꍇAXgɃZbgȂۂC

(2) org.itscool.stylist.function.StringC.insertLine()
oOC

(3) org.itscool.commons.util.URLDecodeUtil.decode()
oOC

(4) org.itscool.commons.dao.BaseDao
    org.itscool.commons.dao.PrepardStatementWrapper
ONE_TO_MANYΉǉ


===========================================================
version 4.0.10
===========================================================
(1) org.itscool.commons.dao,PreparedStatementWrapper.select()
NG[ƃNX̃}bsOp^[3p^[ɕύX

(2) org.itscool.commons.util.InputCheckUtil
NullPointerExceptionC

(3) org.itscool.weber.controller.FrontServletEx.initConfig()
MessageMappings̏Rǉ

(4) org.itscool.stylist.io.HtmlErrorInfoTagConverter
EtH[̓G[ɁAG[R[ho͂悤C
Edivvfo͂Ȃ悤ɏC

(5) org.itscool.weber.controller.Action
̓`FbN\bhǉ

(6) tf[^̑OlێłȂۂC
(7) org.itscool.weber.action.ActionBucketImpl.getRealPath()
NullPointerExceptionC
(8) org.itscool.stylist.el.BaseElRegex.convertArgument()
IuWFNg^̈String^iIuWFNgtoString()j
쐬Ă܂sC

(9) equal, nequal, lthan, mthan, lequal, mequal^O
w_valueyw_value2ELAEL֐gpł悤ɂB

===========================================================
version 4.0.11
===========================================================
(1) org.itscool.commons.dao.Criteria.setOneToMany()
^C~OtoSelectString()new Criteria()
ړ

[UsetOneToManyZbg邱ƂɂA
qe[u̘A̗L𐧌ł悤ɕύX܂B

(2) org.itscool.weber.action.Action.isUserCheck()
[`FbNsтDBɃANZXĂ폜

===========================================================
version 4.0.12
===========================================================
(1) org.itscool.weber.action.ActionNX
getGeneralForm\bhǉ
getString\bhǉ
getInt\bhǉ
getLong\bhǉ
eetShort\bhǉ
getByte\bhǉ
getBoolean\bhǉ
getDouble\bhǉ
getFloat\bhǉ

(2) org.itscool.commons.util.DateFormatUtil.searchDateFormat()
EԂ̎wHH(0-24)ɕύX
EHH;MM̕ϊǉ

(3) org.itscool.commons.dao.select()
L["e[u.J"Ńf[^ZbgہA
e[uw肳ĂȂꍇi擾łȂꍇ)
L["J"݂̂ŃZbg悤C

(4) org.itscool.weber.action.ActionBucketImpl.setAttributeFromSession()
di-config.xmlInitParamvfɃZbV^CAEg̐ݒ肪Lq
ȂƂNullPointerException錻ۂC

(99)m̃oO
decimalC.formatȂǂ̃JX^EL֐ɂ
ɕ'###,###,###'Ƃ
J}(,)܂܂֐ǂݎȂ

===========================================================
version 4.0.13
===========================================================

(1) org.itscool.weber.action.LoginAction, LogoutAction
doExecute()throws Exceptionǉ

(2) org.itscool.commons.document.BeanToXmlDocument
EIuWFNg̊Kw\yєzNXւ̃lXƕϊ@\Ή
ENXyуo[ƃ^OƂ̃}bsO@\ǉ

