请问各位高人在Struts1.2开发中遇到的两个问题,谢谢,马上给分哈!!!

ervinlj 2004-05-05 01:38:49
1.<html:messages>标签的用法
我在我应用程序的Action类中这样保存错误:
ActionMessages messages = new ActionMessages();
ActionMessage errormessage = new ActionMessage("error.employee.emptyname");
messages.add(ActionMessages.GLOBALMESSAGE,errormessage);
savaError(request,messages);
我想当在Action类中遇到错误时,通过使用<html:messages id="MyMessages" />标签在Jsp页面中显示在资源文件中定义的属于error.employee.emptyname键的错误信息,可是我这样使用<html:messages id="MyMessages" />没有能成功,没办法,只好索性又换回使用<html:errors />来显示错误信息,这样使用是成功的,可是为什么使用<html:messages>标签却没有成功呢?如果我指定要使用<html:messages>标签时,应该怎样使用这个标签呢?请各位高人能帮我解决一下,谢谢!!!

2.这段使用<logic:iterate>标签代码为什么要这样写:
为了显示在Jsp页面中显示复选框和复选框的值,我定义有一个自定义标签,其中内含有这些复选框的值,这个自定义标签的代码如下:
package com.example;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.util.ArrayList;
public class skillTag extends TagSupport
{
public int doStartTag()
{
ArrayList skilllist = new ArrayList();
skilllist.add("EJB");
skilllist.add("JDBC");
skilllist.add("JMS");
skilllist.add("JTA");
skilllist.add("Servlet");
skilllist.add("Jsp");
skilllist.add("Java Mail");
pageContext.setAttribute("skillList",skilllist);
return SKIP_BODY;
}
}
为了在Jsp页面中显示这些复选框和复选框的值,我定义有下列这些代码在Jsp页面中使用:
<td>
<logic:iterate id="currentSkill" name="skillList">
<html:multibox property="skills">
<%= currentSkill %>
</html:multibox>
<%= currentSkill %>
<br>
</logic:iterate>
</td>
<logic:iterator>标签的作用是迭代,这不用多说了。其中id属性文档中是这样说的:
The name of a page scope JSP bean that will contain the current element of the collection on each iteration, if it is not null.
而name属性除了在文档中说的两个功能以外:
The name of the JSP bean containing the collection to be iterated (if property is not specified), or the JSP bean whose property getter returns the collection to be iterated (if property is specified).
好象在这种情况下又多了一个含义:被pageContext所设置的一个页面范围的属性名,在这个属性中所联系的对象它是一个Collection。
我所不明白是这个地方
<html:multibox property="skills">
<%= currentSkill %>
</html:multibox>
<%= currentSkill %>
<br>
为什么在这里页面范围的Jsp Bean的名字currentSkill(而在这里我看根本不是文档中所说的什么页面范围的Jsp Bean的名字,我看是以后要使用的代码段变量的名字,在这个代码段变量中保存着Collection集合中当前元素的句柄)要用两次,用一次还不行,只用一次代码段变量currentSkill它只会显示相同数量的复选框,定义在自定义标签程序处理类中复选框它的值就不显示了,不知道这是为什么???<logic:iterate>标签中的id属性到底定义的是什么东西??????currentSkill中到底包含着什么?为什么第一次显示的是相同数量的复选框,而第二次显示的才是复选框的值???复选框和复选框的值到底如何作具体的区分呢???
谢谢各位就以上两个问题能为我做一个详细的解答,我对以上两个问题感到十分的迷惑!!!谢谢,马上给分哈!!!














...全文
178 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
ervinlj 2004-06-12
  • 打赏
  • 举报
回复
谢谢上面这位兄弟,最后还是你帮我把这个问题解决了!
那还有另外一个问题呢?
<html:multibox property="skills">
<%= currentSkill %>
</html:multibox>
<%= currentSkill %>
<br>
为什么第一个<%= currentSkill %>显示的是相同数量的复选框,而第二个<%= currentSkill %>却真正显示的是复选框后的文本值呢?我还是有点不太清楚啊!!!请各位高人能帮我解释一下哈!!!这个问题解决,就一并给分哈!!!


2002PP 2004-06-12
  • 打赏
  • 举报
回复
1.你的方法用错了!
把savaError(request,messages);
改为:this.saveMessages(request,messages);
应该就能在jsp中正确显示信息了.
jsp:
<html:messages id="msg" message="true">
<%=msg%>
</html:messages>
ervinlj 2004-06-12
  • 打赏
  • 举报
回复
up
ervinlj 2004-05-14
  • 打赏
  • 举报
回复
up
ervinlj 2004-05-13
  • 打赏
  • 举报
回复
在Action类中已经将saveErrors改为了saveMessages方法了,在jsp页面中使用
<logic:messagesPresent message="true">
<html:messages message="true" id="message">
<bean:write name="message"/>
</html:messages>
</logic:messagesPresent>
还是不能显示在资源文件中带有html标签的错误信息,靠!见鬼!<html:messages>标签没有<html:errors>标签功能来得强大!!!

还有下面两个问题呢?还是没有人能帮我解决吗???靠!!!
To 海龙:你说的意思是不是就是说第一个<%= currentSkill %>是复选框传递到服务器的值,而不是真正显示在页面上的值,就好比调用request.getParameter方法所获得的值,而在调用第二个
<%= currentSkill %>的时候才是显示在页面上的值。这样理解对吗?而传递到服务器的值和显示在页面上的值是一样的。可是为什么要这样呢?我觉得在<html:multibox>标签间夹着显示在页面上的值可能会更好理解!!!

To sunvsh:
象你这样做:
<html:messages id="message" message="true">
<bean:write name="message"/>
</html:messages>
还是没有成功,没有成功的原因可以绝对排除你说的两个原因,因为我使用<html:errors>标签显示错误信息是成功的。我想可能是我根本没有定义有保存错误信息的bean吧,更别说在这个bean中有message这个属性了。我想象你以上这样来使用message标签是不是意味着要定义一个保存错误信息的bean呢?如果是确实需要这样做的话,那么这个bean应该怎样来写???并且要如何使用这个bean?就象你上面这样吗?还是有其他什么方法???
你贴出来的这段代码意味着什么?请分别就你代码<logic:iterate>标签中的id,name属性和<bean:write>标签中的name属性作一下详细解释好吗?
我是自学的,这几个问题没有完全搞明白,我寝食难安哈!!!谢谢!!!




judyhui7612 2004-05-13
  • 打赏
  • 举报
回复
savaError(request,messages);
改為
saveMessages(request,messages);
judyhui7612 2004-05-13
  • 打赏
  • 举报
回复
<logic:messagesPresent message="true">
<html:messages message="true" id="message">
<bean:write name="message"/>
</html:messages>
</logic:messagesPresent>
ervinlj 2004-05-12
  • 打赏
  • 举报
回复
再顶一下!!!
ervinlj 2004-05-12
  • 打赏
  • 举报
回复
用<html:messages id="message" message="true" />来显示保存的错误信息好象不支持html标签也!!!
例如,我在资源文件中定义有error.missing.name=<li><b>User Name Required</b></li>,用<html:message>标签就统统的显示在页面上了,而用<html:errors>标签就不会,会显示一个分级列表,并且字体加粗!!!
还没有<html:errors>标签来得强大哈!!!
我前面问的两个问题高人快帮我看看!!!谢谢!!!
whxy0144 2004-05-12
  • 打赏
  • 举报
回复
我现在才开始打算学习struts,帮你顶一下先.
呵呵.
ervinlj 2004-05-12
  • 打赏
  • 举报
回复
我知道这个currentSkill中是Collection经循环后的每一个值,这比较好理解。可是我不明白的是在<html:multibox>标签中夹着的<%= currentSkill %>(第一个currentSkill)显示在页面上的却是复选框呢?而在第二个currentSkill却是真正显示在页面上的值呢?这两个currentSkill如何作区分呢?请高人作详细解释!不理解的地方在这里!!!

struts1.2和1.1有好多令人激动人心的新特性呢!!!比如支持多个配置文件,解决了团队开发的问题。
yeshucheng 2004-05-12
  • 打赏
  • 举报
回复
真的有struts1.2?
我可能老土了,我现在还是用1.0的呢,呵呵
等下个项目开始用1.1
ervinlj 2004-05-12
  • 打赏
  • 举报
回复
是没有关系,但是如果要使用ActionMessage和<html:message>标签显示错误信息就要使用struts1.1或者struts1.2了!!!
ervinlj 2004-05-12
  • 打赏
  • 举报
回复
再up
sagittarius1979 2004-05-11
  • 打赏
  • 举报
回复
插一句,你的程序和struts1.2没有关系,呵呵!
sagittarius1979 2004-05-11
  • 打赏
  • 举报
回复
1.
action中:
savaError(request,messages);
->
saveMessage(request,messages);
jsp中:
<html:messages id="MyMessages" />
->
<html:messages/>
2.
currentSkill中包含的是<logic:iterate>对collection循环后,每一个值.
<logic:iterate/>的标签属性中有一个idx的属性每做一次循环就加一,所以按照你
的程序第一次循环,currentSkill的值为EJB,第二次为JDBC,依次类推。。
sagittarius1979 2004-05-11
  • 打赏
  • 举报
回复
struts1.2的方法快说,说了给你解答。

^_^
ervinlj 2004-05-11
  • 打赏
  • 举报
回复
To javadanny:
要实现你说的这个功能,你可以这样做:
在Struts-config.xml文件中定义一个全局forward,在Action类中作逻辑判断
if(errors.size() > 0)
{
saveErrors(request,errors);
return mapping.findForward(你的全局Forward名字);
}
然后再在结果页面中用<html:errors />标签显示错误信息啊!!!

可是谁来帮我解答解答我问的两个问题呢?
To 海龙:你说的意思是不是就是说第一个<%= currentSkill %>是复选框传递到服务器的值,而不是真正显示在页面上的值,就好比调用request.getParameter方法所获得的值,而在调用第二个
<%= currentSkill %>的时候才是显示在页面上的值。这样理解对吗?而传递到服务器的值和显示在页面上的值是一样的。可是为什么要这样呢?我觉得在<html:multibox>标签间夹着显示在页面上的值可能会更好理解!!!

To sunvsh:
象你这样做:
<html:messages id="message" message="true">
<bean:write name="message"/>
</html:messages>
还是没有成功,没有成功的原因可以绝对排除你说的两个原因,因为我使用<html:errors>标签显示错误信息是成功的。我想可能是我根本没有定义有保存错误信息的bean吧,更别说在这个bean中有message这个属性了。我想象你以上这样来使用message标签是不是意味着要定义一个保存错误信息的bean呢?如果是确实需要这样做的话,那么这个bean应该怎样来写???并且要如何使用这个bean?就象你上面这样吗?还是有其他什么方法???
你贴出来的这段代码意味着什么?请分别就你代码<logic:iterate>标签中的id,name属性和<bean:write>标签中的name属性作一下详细解释好吗?
我是自学的,这几个问题没有完全搞明白,我寝食难安哈!!!谢谢!!!


javadanny 2004-05-11
  • 打赏
  • 举报
回复
问问楼主一个问题啊。
ActionErrors errors = new ActionErrors();
errors.add(ActionErrors.GLOBAL_ERROR,
new ActionError("error.password.mismatch"));
saveErrors(request, errors);
为何mapping.getInputForward()的值为空啊。
我怎么样才能跳到错误页面去啊。
同时显示错误的提示信息啊。
ervinlj 2004-05-11
  • 打赏
  • 举报
回复
问题解决,给分的快!!!
加载更多回复(15)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧