2013年1月20日 星期日

無代無志會發生 ORA-01034 ORA-27101 錯誤!?

明明好好的11g R2運作了很久,現在會發生 
ORA-01034 - Oracle not available
ORA-27101 - shared memory realm does not exist 
錯誤訊息!?
這時,別急,先找一下ORACLE_HOME\database\oradim.log看一下是什麼錯誤訊息
如果是 ORA-28056: Writing audit records to Windows Event Log failed
就要從event log去著手,看一下windows event log服務有沒有起來
驗證方式是從控制台-->系統管理工具-->事件檢視器 看一下事件檢視本機是否可以正常
(應該是不正常才會有這樣的訊息的,不是嗎?)
不正常的話,就算重啟windows event log 服務也沒用,
這時,先到「C:\Windows\System32\winevt\Logs」把所有的evtx檔(event log)都砍光,
再去啟動windows event log service ,再去看事件檢視器是否起不起的來
都正常了,重開機(懶得再去sqlplus試重啟指令了),再連看看,ok,沒事了,
(今天你看到這文章,可以讓你少走一些冤枉路了)

但,如果不是跟event log有關的,就不一樣了,像這個個案 是local_listener的問題,又是另一個故事了

2013年1月19日 星期六

常用的struts2 & OGNL標籤範例

struts2

ognl

<li>访问值栈中的action的普通属性: username = <s:property value="username"/> </li>
<li>访问值栈中对象的普通属性(get set方法)<s:property value="user.age"/> | <s:property value="user['age']"/> | <s:property value="user[\"age\"]"/> | wrong: <%--<s:property value="user[age]"/>--%></li>
       <li>访问值栈中对象的普通属性(get set方法): <s:property value="cat.friend.name"/></li>
       <li>访问值栈中对象的普通方法:<s:property value="password.length()"/></li>
       <li>访问值栈中对象的普通方法:<s:property value="cat.miaomiao()" /></li>
       <li>访问值栈中action的普通方法:<s:property value="m()" /></li>
       <hr />
       <li>访问静态方法:<s:property value="@com.bjsxt.struts2.ognl.S@s()"/></li>
       <li>访问静态属性:<s:property value="@com.bjsxt.struts2.ognl.S@STR"/></li>
       <li>访问Math类的静态方法:<s:property value="@@max(2,3)" /></li>
       <hr />
       <li>访问普通类的构造方法:<s:property value="new com.bjsxt.struts2.ognl.User(8)"/></li>
       <hr />
       <li>访问List:<s:property value="users"/></li>
       <li>访问List中某个元素:<s:property value="users[1]"/></li>
       <li>访问List中元素某个属性的集合:<s:property value="users.{age}"/></li>
       <li>访问List中元素某个属性的集合中的特定值:<s:property value="users.{age}[0]"/> | <s:property value="users[0].age"/></li>
       <li>访问Set:<s:property value="dogs"/></li>
       <li>访问Set中某个元素:<s:property value="dogs[1]"/></li>
       <li>访问Map:<s:property value="dogMap"/></li>
       <li>访问Map中某个元素:<s:property value="dogMap.dog101"/> | <s:property value="dogMap['dog101']"/> | <s:property value="dogMap[\"dog101\"]"/></li>
       <li>访问Map中所有的key:<s:property value="dogMap.keys"/></li>
       <li>访问Map中所有的value:<s:property value="dogMap.values"/></li>
       <li>访问容器的大小:<s:property value="dogMap.size()"/> | <s:property value="users.size"/> </li>
       <hr />
       <li>投影(过滤)<s:property value="users.{?#this.age==1}[0]"/></li>
       <li>投影:<s:property value="users.{^#this.age>1}.{age}"/></li>
       <li>投影:<s:property value="users.{$#this.age>1}.{age}"/></li>
       <li>投影:<s:property value="users.{$#this.age>1}.{age} == null"/></li>
       <hr />
       <li>[]:<s:property value="[0].username"/></li>
1.     ognl直接访问action类里面的属性(也就是客户端传递过去的值)
2.     如果类不是直接在action里面的话,那么就需要在客户端传递如user.age.这个时候,struts2会自动new User()对象出来。
3.     在新版的struts2里面默认的是无法直接访问静态方法的,需要在struts.xml里面进行配置 默认是false
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
 
4.     投影就是筛选。
5.     action里面的所有的属性都需要get  set  否则无法获取到request的参数

struts2 tag(常用标签)

property

<%@ taglib uri="/struts-tags" prefix="s" %>
…..
<li>property: <s:property value="username"/> </li> //取值默认是ognl
<li>property 取值为字符串: <s:property value="'username'"/> </li>
<li>property 设定默认值: <s:property value="admin" default="管理员"/> </li>
<li>property 设定HTML: <s:property value="'<hr/>'" escape="false"/> </li>

Set

<li>set 设定adminName值(默认为request 和 ActionContext): <s:set var="adminName" value="username" /></li><!-- value is a ognl(object ) not a String -->
<li>set 从request取值: <s:property value="#request.adminName" /></li>
<li>set 从ActionContext取值: <s:property value="#adminName" /></li>
<s:debug></s:debug>
<%--<li>set 设定范围: <s:set name="adminPassword" value="password" scope="page"/></li>
<li>set 从相应范围取值: <%=pageContext.getAttribute("adminPassword") %></li>
--%>
<li>set 设定var,范围为ActionContext: <s:set var="adminPassword" value="password" scope="session"/></li>
<li>set 使用#取值: <s:property value="#adminPassword"/> </li>
<li>set 从相应范围取值: <s:property value="#session.adminPassword"/> </li>

bean

bean 查看debug情况:
<s:bean name="com.bjsxt.struts2.tags.Dog" var="myDog">
<s:param name="name" value="'oudy'"></s:param>
</s:bean>
<s:property value="name"/>
拿出值:
<s:property value="#myDog.name"/>
<s:debug></s:debug>
bean的作用就是相当于new了一个新的对象。如果想在actionContext里面看到对象,需要给对象设置var属 性。<s:param> 标签是设置参数值,value默认是一个ognl的表达式,所以如果参数是一个string的话,那么就需要使用”’**’”这种形式;
对象属性的取值有两种方式: 推荐使用第二种方式
<s:property value="name"/>
<s:property value="#myDog.name"/>
bean 定义bean,并使用param来设定新的属性值:
<s:bean name="com.bjsxt.struts2.tags.Dog" >
<s:param name="name" value="'pp'"></s:param>
<s:property value="name"/>
<s:debug></s:debug>
</s:bean>
如果单纯的就是一个bean,而没有var,bean就是在bean体里面将对象压到栈顶,从而可以在bean体里面直接访问其中的属性,但是在外面(bean)结束之后就不可以再访问了。

include

<li>include _include1.html 包含静态英文文件
<s:include value="/_include1.html"></s:include>
</li>
<li>include _include2.html 包含静态中文文件
<s:include value="/_include2.html"></s:include>
</li>
<li>include _include1.html 包含静态英文文件,说明%用法
<s:set var="incPage" value="%{'/_include1.html'}" />
<s:include value="%{#incPage}"></s:include>
</li>
不建议使用,因为在包含有中文的文件的时候,可能会出现乱码或者直接无法显示结果,
<s:property >和<s:include> 前者的value属性是一个ognl的表达式,后者则是一个String,所以需要使用%{}的形式将String转换成为ognl表达式
this.addFieldError("fielderror.test", "wrong!");
<s:fielderror fieldName="fielderror.test" theme="simple"></s:fielderror>

if else

<li>if elseif else:
age = <s:property value="#parameters.age[0]" /> <br />
<s:set var="age" value="#parameters.age[0]" />
<s:if test="#age < 0">wrong age!</s:if>
<s:elseif test="#age < 20">too young!</s:elseif>
<s:else>yeah!</s:else><br />
<s:if test="#parameters.aaa == null">null</s:if>
<s:debug></s:debug>
</li>
1.#parameters.age[0] 因为在actionContext里面有parameter这个属性,所以可以通过 #来进行取值。而age参数可以传递多个值,所以是一个集合(数组),
2.当参数名称过长的时候,可以使用<s:set var=”” value=”” 来进行设置>

iterator:

<li>遍历集合:<br />
<s:iterator value="{1, 2, 3}" >
<s:property/> |
</s:iterator>
</li>
<li>自定义变量:<br />
<s:iterator value="{'aaa', 'bbb', 'ccc'}" var="x">
<s:property value="#x.toUpperCase()"/> |
</s:iterator>
</li>
<li>使用status:<br />
<s:iterator value="{'aaa', 'bbb', 'ccc'}" status="status">
<s:property/> |
遍历过的元素总数:<s:property value="#status.count"/> |
遍历过的元素索引:<s:property value="#status.index"/> |
当前是偶数?:<s:property value="#status.even"/> |
当前是奇数?:<s:property value="#status.odd"/> |
是第一个元素吗?:<s:property value="#status.first"/> |
是最后一个元素吗?:<s:property value="#status.last"/>
<br />
</s:iterator>
<s:debug></s:debug>
</li>
<li>
<s:iterator value="#{1:'a', 2:'b', 3:'c'}" >
<s:property value="key"/> | <s:property value="value"/> <br />
</s:iterator>
</li>
<li>
<s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="x">
<s:property value="#x.key"/> | <s:property value="#x.value"/> <br />
</s:iterator>
</li>
 
引用來源 http://m.oschina.net/blog/89000

2013年1月9日 星期三

Windows 7密技: 啟用Windows 7的快速啟動工具列

我想大家都多少已經知道怎麼用增加一個工具列的方式來產生快捷列
(參考這個圖文並茂的連結)
就是從. 點選新增工具列後,在跳出的視窗輸入 %UserProfile%\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar 的方式加常用的快捷列
不過快捷列有了,如何把它拖到我們想要的順序,就要試一下了
不必用力,只是滑鼠點下去的位置之後,一定要右拖,才能交換區塊,
向左拖是不行的,
 要不,就要拖到「開始」的那顆球所在的區塊才能達到xp風格的快捷列的呈現方式
如下影音所示範