我在jsp页面中遇到了很多问题.我应该用什么标签从用户那里获取日期(yyyy-MM-dd)并将其存储在Struts2动作的Date属性中?
我的操作中的属性声明为java.util.Date.我希望jsp页面的输入落在这个属性中.
请帮忙.
我得到无效字段错误(在JSP中),如果用作:textfield标签,以正确的格式输入日期.
Sam*_*uel 10
我知道这篇文章有点旧,但解决方案可能对其他人有用.
Struts的默认转换器似乎无法正常工作.即使从操作填充的只读字段,也会发生字段错误.
我通过定义自己的转换器来解决它:
创建转换器类(使用您需要的日期格式):
public class StringToDateTimeConverter extends StrutsTypeConverter {
// WARNING not safe in multi-threaded environments
private static final DateFormat DATETIME_FORMAT = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss");
public Object convertFromString(Map context, String[] strings, Class toClass) {
if (strings == null || strings.length == 0 || strings[0].trim().length() == 0) {
return null;
}
try {
return DATETIME_FORMAT.parse(strings[0]);
} catch (ParseException e) {
throw new TypeConversionException("Unable to convert given object to date: " + strings[0]);
}
}
public String convertToString(Map context, Object date) {
if (date != null && date instanceof Date) {
return DATETIME_FORMAT.format(date);
} else {
return null;
}
}
}
Run Code Online (Sandbox Code Playgroud)将转换注释放在属性设置器上(或使用conversion.properties文件)
@Conversion()
public class MyEditAction {
// ...
@TypeConversion(converter="my.app.common.converter.StringToDateTimeConverter")
public void setUploadedDate(Date uploadedDate) {
this.uploadedDate = uploadedDate;
}
Run Code Online (Sandbox Code Playgroud)在我的情况下,我不需要编辑它,但想在jsp中指定格式.我使用了一个额外的隐藏字段来保留原始值(另一种替代方法是使用Preparable接口):
<s:textfield name="uploadedDateDisplay" value="%{getText('format.datetimesecond',{uploadedDate})}" size="70" disabled="true"/>
<s:hidden name="uploadedDate" />
Run Code Online (Sandbox Code Playgroud)
所以也许我不明白这个问题。但我希望这个例子能有所帮助(顺便说一句,这段代码不会起作用,它只是为了帮助您了解 Sturts2 如何发挥其魔力);因此,对于表单输入,您需要在 java 中拥有一个holder类,这样您就可以从操作类(例如Holder.java)调用您的日期:
public class Holder{
pirvate Date date;
public getDate(){
return date;
}
public setDate(Date date){
this.date = date;
}
}
Run Code Online (Sandbox Code Playgroud)
您的 Holder.java 验证,以便您可以确保其日期 Holder-validation.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator
1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="date">
<field-validator type="date">
<message><![CDATA[ Must be a date ]]></message>
</field-validator>
</field>
</validators>
Run Code Online (Sandbox Code Playgroud)
您的操作类,您可以在其中调用确保holder.getdate来获取日期getDateAction.java:
private Holder holder;
public class getDateAction{
public String execute(){
//get your date
Date date = holder.getDate();
return SUCCESS;
}
}
Run Code Online (Sandbox Code Playgroud)
您的 jsp 表单让客户端能够输入日期。确保输入 name="holder.date"。这是site.jsp:
<s:form id="Form" name="MyForm" action="getDateAction" method="post" class="form">
<input type="text" name="holder.date" id="date" size="25" value="" class="required text">
</s:form>
Run Code Online (Sandbox Code Playgroud)
最后但并非最不重要的一点是你的 struts.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="example" extends="struts-default">
<action name="getdate" class="com.location.action.getDateAction">
<result>example.jsp</result>
</action>
</package>
</struts>
Run Code Online (Sandbox Code Playgroud)
这里有关于 Struts2 日期格式的解释:Struts 2 Date Format Examples
但我相信你在jsp中寻找的标签是
<s:date name="Date_Name" format="yyyy-MM-dd" />
Run Code Online (Sandbox Code Playgroud)
其中 Date_Name 是 Java 中的 Date 对象。
| 归档时间: |
|
| 查看次数: |
44684 次 |
| 最近记录: |