<html:messages> 标签小结
ActionMessages是Struts 1.1后所新增的类别,它变成了ActionErrors的父类别,同样的,ActionMessage也是Struts 1.1新增的类别,ActionError则已经不建议使用。
ActionMessages搭配Struts的<html:messages>标签,在管理讯息时就更为简易,以 伺服端表单验证 这篇为例,如果能使用ActionMessages搭配<html:messages>标签,那么讯息管理会很方便,例如 UserForm.java可以改为:
package onlyfun.caterpillar;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import org.apache.struts.Globals;
import org.apache.struts.util.MessageResources;
public class UserForm extends ActionForm {
private String username;
private String password;
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public void reset(ActionMapping mapping,
HttpServletRequest req) {
username = null;
password = null;
}
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if(getUsername() == null ||
getUsername().length() < 1) {
errors.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("error.invalidUsername"));
}
if(getPassword() == null ||
getPassword().length() < 1) {
errors.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("error.invalidPassword"));
}
return errors;
}
}
ActionMessage中的字串(例如 error.invalidUsername)对应于讯息档案中的键值。LoginAction.java可以修改如下:
package onlyfun.caterpillar;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import org.apache.commons.beanutils.PropertyUtils;
public class LoginAction extends Action {
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
String username = (String)
PropertyUtils.getSimpleProperty(form, "username");
String password = (String)
PropertyUtils.getSimpleProperty(form, "password");
request.setAttribute("username", username);
if(username.equals("caterpillar") &&
password.equals("1234")) {
return mapping.findForward("helloUser");
}
ActionMessages messages = new ActionMessages();
messages.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("message.namePasswordMismatched")
);
addMessages(request, messages);
return mapping.findForward("loginFail");
}
}
最后配合<html:messages>标签,可以输出ActionMessages的内容,来修改一下fail.jsp:
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<html>
<head>
<title>Sorry!</title>
</head>
<body>
<H1>
<html:messages id="error">
<bean:write name="error"/>
</html:messages>
<html:messages id="message" message="true">
<bean:write name="message"/>
</html:messages>
</H1>
<p>
<a href='/strutsapp/html/form.htm'>Login</a>
</body>
</html>
<html:messages>的message属性如果不设定为true,会输出ActionErrors中所储存的讯息,Error代表的是一个操作方面的错误,例如错误操作导致使用者名称或密码为空(当然也许也是故意的)。
<html:messages>的message属性如果设定为true,会输出ActionMessages中所储存的讯息, Message表示一个提示讯息,也许使用者输入了不正确的资讯,例如在输入名称与密码时打错了字,程式要提示使用者他们输入了不正确的讯息。
在国际化讯息方面,<html:messages>标签是根据session中的Locale物件来决定要显示区域讯息,您可以在 Action中使用setLocale()方法来改变Locale物件,例如:
Locale locale = new Locale("zh", "CN");
setLocale(request, locale);
如上设定,<html:messages>会找messages_zh_CN.properties中的简体中文讯息来显示。现在的问题是,那ActionForm中的讯息呢?来看一下setLocale()中的原始码您就知道怎么作了:
protected void setLocale(HttpServletRequest request,
Locale locale) {
HttpSession session = request.getSession();
if (locale == null) {
locale = Locale.getDefault();
}
session.setAttribute(Globals.LOCALE_KEY, locale);
}
所以如果您要一开始进行 ActionForm 验证时就使用区域化讯息,则可以在reset()或validate()方法中加入:
HttpSession session = request.getSession();
session.setAttribute(Globals.LOCALE_KEY, locale);
或者您可以在必要的地方加入以上这段讯息,像是Servlet Filter等地方,这就看您的需求而定了。
分享到:
相关推荐
<p:growl id="messages" showDetail="true" /> </h:form> </h:body> ``` 在上述代码中,`fileUploadListener`属性绑定到一个后台bean的方法,用于处理文件上传事件。`mode="advanced"`表示使用高级模式,支持多...
`<html:errors>`和`<html:messages>`标签则用于在页面上显示错误信息和系统消息。`<html:errors>`通常用于展示表单验证失败时的错误信息,而`<html:messages>`则用于显示一般性的系统消息,如通知或警告。 #### ...
表单相关的标签,如`<html:form>`、`<html:text>`、`<html:password>`、`<html:textarea>`、`<html:hidden>`、`<html:radio>`、`<html:checkbox>`、`<html:multibox>`、`<html:select>`、`<html:submit>`、`...
9. `<html:messages>`:类似于`<html:errors>`,但用于显示全局消息,如提示信息或系统通知。 了解并熟练使用这些Struts HTML标签,可以帮助开发者更高效地构建Web界面,减少直接编写JSP页面的复杂性。同时,这些...
例如,使用`<s:head>`标签引入CSS和JavaScript资源,`<s:fielderror>`显示字段验证错误,`<s:messages>`展示全局消息。 四、实例解析 以下是一个简单的用户注册表单的示例: ```jsp <%@ taglib prefix="s" uri="/...
例如,可以使用`<html:form>`标签的`validator="true"`属性启用校验,并通过`<html:messages>`显示验证错误。 5. **国际化** 使用`<bean:message>`和`<fmt:message>`标签可以实现国际化。这些标签从资源文件中获取...
6. 标签<h:messages>用于显示验证错误或信息消息,例如:<h:messages globalOnly="true"/>(全局消息)或<h:messages info="true"/>(仅显示信息类型的消息)。 7. 标签<h:inputText>、<h:inputSecret>、<h:input...
- **`<c:out>`标签**:用于在JSP页面中输出数据。 - 属性: - `value`:必填项,表示要输出的数据,可以是常量或EL表达式。 - `default`:非必填,当`value`属性的值为`null`时输出的默认信息。 - `escapeXml`:...
- **其它标签**:包括`<h:form>`定义表单,`<h:message>`和`<h:messages>`显示验证错误,以及`<h:graphicImage>`显示图片等。 3. 表格处理 JSF也支持创建复杂的表格布局。例如: - **简单的表格**:`<h:dataTable>`...
- `<s:messages>`:显示用户消息或提示信息。 **3. 标签使用示例** 以下是一个简单的例子,展示如何使用Struts1.x标签创建一个用户登录表单: ```jsp <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> ...
- **错误消息显示**:利用`<html:errors>`和`<html:messages>`标签显示表单验证错误消息,提高用户体验。 ### 总结 通过上述分析,我们了解到HTML标题的重要性和在网页结构中的作用,同时也掌握了Struts框架中HTML...
5. **其他**:包括`<h:form>`、`<h:message>`、`<h:messages>`和`<h:graphicImage>`等。 这些标签拥有共同的属性,例如: - `id`:用于唯一标识组件,以便其他标签引用。 - `binding`:允许将组件绑定到`...
- `<html:messages>`:这个标签用于显示来自ActionForm或Action错误消息。它可以帮助统一处理页面上的错误信息显示。 - `<html:form>`:用于创建表单,它能够自动绑定到ActionForm,并且可以设置提交的URL和HTTP...
- **功能**:类似于HTML中的`<a>`标签,用于创建超链接。 - **示例**: ```xml <s:a href="%{someAction!}">点击这里</s:a> ``` ##### 2. `<s:action name="">` —— 执行Action - **功能**:用于调用Action类中...
JSF(JavaServer Faces)是一种Java Web...例如,`<f:ajax>`标签可以轻松地添加Ajax功能,而`<h:messages>`则用于显示验证错误消息。通过深入理解和熟练应用这些标签和注解,开发者可以构建出高效、易维护的JSF应用。
- **其他标签**:如`<h:form>`、`<f:message>`、`<f:messages>`等。 #### 2. JSF标准HTML标签共通属性 JSF中的HTML标签具有一些共通的属性,具体如下: - **id**:所有组件均可设置,用于标识组件以便其他标签或...
- `<h:messages>`:显示验证错误信息。 - `<h:panelGrid>`:布局组件,类似HTML的table。 - `<h:selectOne>`和`<h:selectMany>`:创建单选或多选列表。 - `<h:selectItem>`和`<h:selectItems>`:定义选择列表的...