我使用addActionMessage
和addActionError
方法在struts2操作类中添加了我的错误和消息。
现在我想要代码在html页面中显示此消息和此错误?是否可以打印?
答案 0 :(得分:5)
放
<s:actionerrors />
和
<s:actionmessages />
JSP中的标签
AND,为了获得更好的图形结果,请使用特定的div容器(例如一个红色,一个绿色)并在之前检查是否有消息或错误(仅在非空时打印div):
<s:if test="hasActionErrors()">
<div class="feedError">
<s:actionerrors />
</div>
</s:if>
<s:if test="hasActionMessages()">
<div class="feedOk">
<s:actionmessages />
</div>
</s:if>
和CSS
.feedError{
width: 100%;
border: 10px solid red;
}
.feedOk{
width: 100%;
border: 10px solid green;
}
编辑:不,据我所知,你不能直接从HTML获取动作错误和消息。 你可以对从Session中检索它们的动作进行ajax调用,然后在JSon中返回它们,但这实际上是过度的,设计不好而且没有必要。
作为一种解决方案,您可以使用另一种视图技术而不是JSP; 它不仅仅是纯HTML,但至少你不能在页面内使用Scriptlets,如果这是你使用JSP的问题。
例如,您可以使用FreeMarker Template。
以前的JSP代码段在.ftl文件中会变成这样(未经测试):
<#if (actionErrors?size>0)>
<div class="feedError">
<@s.actionerror />
</div>
</#if>
<#if (actionMessages?size>0)>
<div class="feedOk">
<@s.actionmessage />
</div>
</#if>
或Velocity(再次,未经测试):
#if( $actionErrors.size() > 0 )
<div class="feedError">
#foreach( $msg in $actionErrors )
[$msg]<br />
#end
</div>
#end
#if( $actionMessages.size() > 0 )
<div class="feedOk">
#foreach( $msg in $actionMessages )
[$msg]<br />
#end
</div>
#end
注意:如果不使用JSP的原因是为了防止scriptlet,可以在web.xml中配置此行为添加
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<scripting-invalid>true</scripting-invalid>
</jsp-property-group>
</jsp-config>
将JSP与Struts2一起使用并不是唯一的方法,但它是最简单,最快的,imho。