logic:messagesPresent

logic:messagesPresent标签的典型用法:

 

<logic:messagesPresent>
         <ul>
                  <html:
messages id="message">
                             <li><bean:write
name="message"/></li>
                  </html:messages>
         </ul>
</logic:messagesPresent>

 

logic:messagesPresent标签用于以下情况:
request作用域中存在一个ActionMessages对象,标签的property属性和ActionMessages中的property对应。 request作用域中存在一个ActionErrors对象,标签的property属性和ActionErrors中的property对应。 存在一个String对象,将其转换(构造)ActionMessage然后在添加到ActionMessages中。

存在一个String Array对象,将数组中的每一个String转换成一个ActionMessage,在将其添加到ActionMessages中。 标签的message属性值为true时将以Globals.MESSAGE_KEYkeyrequest作用域中查找Message,其它情况下,将name的值作为key查找,如果name 没有出现,默认值为Globals.ERROR_KEY

html:message 可以让你向用户显示错误信息(默认)或消息信息,而html:errors 只显示错误信息。很明显,错误信息或消息信息一定要保存在request里,否则就什么也不会显示。

Ref:

[1]http://struts.apache.org/1.x/struts-taglib/tlddoc/index.html

[2]http://www.diybl.com/course/3_program/java/javajs/2008711/132741.html

 

<logic:messagesPresent property="property1" message="true"> Message:property1 存在 </logic:messagesPresent>

我们知道,在Action类中我们可以通过将一个ActionErrorsActionMessages对象添加进request scope

saveMessages(request, msgs);

Globals.MESSAGE_KEY(值为org.apache.struts.action.MESSAGE”)作为键。

 

saveErrors(request, msgs);

Globals.ERROR_KEY(值为org.apache.struts.action.ERROR”)作为键。

 

<logic:messagesPresent/> 标签就是用来检测在request scope内,有没有以名为Globals.MESSAGE_KEYGlobals.ERROR_KEYErrors/Messages对象。

 

该标签的message属性,指定检测在那里进行。(Globals.ERROR_KEY缺省  Globals.MESSAGE_KEY 设为true

 

如:<logic:messagesPresent property="property1">

就是检测在request scope中有没有一个名为:org.apache.struts.action.ERROR” 也就是Globals.ERROR_KEY的值,的对象,而在该对象中,有没有一个名为”property1”的属性。

 

如:<logic:messagesPresent property="property1" message="true">

就是检测在request scope中有没有一个名为:org.apache.struts.action.Message” 也就是Globals.MESSAGE_KEY的值,的对象,而在该对象中,有没有一个名为”property1”的属性。

 

其实我们在后台通过 saveErrors(request, msgs); 就相当于

request.setAttribute(Globals.ERROR_KEY, msgs);

之所以用saveErrors方法,就是简化操作,让我们不用为这个对象命名,使用default的名字,从而前台logic:messagesPresent标签中也不用指定name属性,因为在属性message不是true的情况下,该标签默认认为,我们就是来检测名为 Globals.ERROR_KEY的对象。

所以,如果我们在后台 request.setAttribute("MyErrors", msgs);

而前台 <logic:messagesPresent name="MyErrors" property="property1">

指定属性name,是一样可以进行判断的。

 

而当message属性为true的时候,标签就会忽略name属性,只检测名为 Globals.MESSAGE_KEY的对象。这种情况我们就只能以这个default的名字来命名存储在request scope中的对象。

 

可为什么我们一定要用struts默认的名字(Globals.ERROR_KEY/Globals.MESSAGE_KEY)呢?因为我们只检测是否存在是不够的。对于messages或者errors我们更重要的是来显示它的信息(丛rescources里面获取)一般用<html:messages/>或者<html:errors/>。而这两个标签,默认都是得到名为Globals.ERROR_KEYGlobals.MESSAGE_KEY的对象。当然我们通过指定name属性,也可以得到我们自定义的名字。但问题是它将无法从我们自定义名字的对象中获得属性,也就是说你不能指定property,因为你自定义的名字无法映射到它所包含的对象中的属性(也就是没有getter()方法)。而如果用default的命名方式(Globals.ERROR_KEYGlobals.MESSAGE_KEY) struts就会建立这种对象与属性之间的映射。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值