【问题标题】:Date Conversion in Struts2 [closed]Struts2中的日期转换[关闭]
【发布时间】:2014-01-05 14:44:14
【问题描述】:

我想知道如何在 Struts2 中将 String 转换为 Date。我有一个简单的表单,用户可以在其中以这种格式"yyyy-MM-dd" 提供日期。将 Sturts2 映射表提交给 bean。我在日期转换中遇到错误。我用谷歌搜索了很多,每一个地方都说我们必须为此使用自定义类型转换器。我不想为日期转换编写自定义类型转换器。我认为Struts2中应该有一个简单的数据转换机制,因为数据转换是很常见的功能。

JSP

<s:form action="AddDomain">
    <s:push value="idp">
        <s:textfield name="domainName"         label="Domain Name" />
        <s:textfield name="url"                label="Domain URL" />
        <s:textfield name="noOfLicense"        label="License Purchased" />

        <s:textfield name="licenseExpireDate"  label="License Expire Date" 
                                               title="YYYY-MM-DD like 2013-01-21" />

        <s:textfield name="userActiveDuration" label="Active User Duration"
                                               title="please mention in days" />

        <s:textarea  name="notes"              label="Note" cols="30" rows="5" ></s:textarea>

        <s:submit value="Add" />
    </s:push>
</s:form>

这是用户输入输入的 JSP。

模型类

@Entity
@Table(name = "Domain")
public class IdentityProvider implements Serializable {

    @Id
    @Basic(optional = false)
    private String url;
    private String domainName;
    private int noOfLicense;
    private int userActiveDuration;
    private int activeUsers;
    private Date licenseExpireDate;
    private String notes;

    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private String domainIdCode;

    public IdentityProvider(String name, String url, int nol, int time,Date d,String notes) {
        this.setDomainName(name);
        this.setUrl(url);
        this.setNoOfLicense(nol);
        this.setUserActiveDuration(time);
        this.setLicenseExpireDate(d);
        this.setNotes(notes);
    }

    public IdentityProvider() {

    }

    // Getter Setter
}

动作类

public class DomainManagementAction extends ActionSupport 
                                 implements ModelDriven<IdentityProvider> {

    private IdentityProvider idp = new IdentityProvider();

    public IdentityProvider getIdp() {
        return idp;
    }

    public void setIdp(IdentityProvider idp) {
        this.idp = idp;
    }

    public String saveDomain() {
        IDPBroker broker = new IDPBroker();
        broker.saveDomain(idp);
        return ActionSupport.SUCCESS;
    }


    @Override
    public IdentityProvider getModel() {
        // TODO Auto-generated method stub
        return idp;
    }

}

【问题讨论】:

    标签: java date struts2 type-conversion struts2-interceptors


    【解决方案1】:

    Struts2 Type Conversion

    内置类型转换支持

    类型转换由 XWork 实现。

    XWork 将自动处理最常见的类型转换 你。这包括支持为每个字符串转换为字符串和从字符串转换为字符串 以下内容:

    字符串
    布尔值/布尔值
    字符/字符
    int / Integer、float / Float、long / Long、double / Double
    日期 - 对与当前请求关联的区域设置使用 SHORT 格式
    数组 - 假设可以将单个字符串转换为单个项目
    集合 - 如果不能确定对象类型,则假定它是一个字符串并创建一个新的 ArrayList

    SHORT format 在 JAVA 中:

    Style     U.S. Locale   French Locale
    
    SHORT       6/30/09       30/06/09
    

    这意味着它已经可以工作了,但只有 SHORT 格式,而且它是不可配置的。试试看。

    然后您可以在发送之前使用一些 javascript hack 更改值客户端,或复制并粘贴 this small converter,或使用 jQuery datetimepicker(推荐),您唯一的问题将是哪个主题最酷:)


    编辑

    在一些加密评论之后,我已经尝试过了,显然它就像文档所述。

    • 如果您的区域设置是(例如)en_US,您需要发送格式为MM/dd/yy 的字符串数据。
    • 如果您的 Locale 是(例如)it_IT,您需要发送格式为 dd/MM/yy 的字符串数据。
    • 如果您输入dd/MM/yyen_US 区域设置,您将收到验证错误和INPUT 结果。
    • 如果您尝试使用- 而不是/,同样会失败。
    • 如果您以其他格式输入日期,例如dd/MM/yyyy(与 SHORT 不同,但适合您的区域设置),您的日期将正确设置为相同。
    • 如果您在 JSP 中读取 Action 日期而不对其进行格式化,它将始终显示为 SHORT。

    然后,如上所述,如果您需要让用户手动输入日期,请​​告诉用户尊重您的区域设置的正确格式(例如。

    <label>Input a date (dd/mm/yyyy):</label> 
    <s:textfield name="aDate" />
    <s:fielderror fieldName="aDate" />
    

    或者插入后通过javascript修改,或者使用自定义转换器。

    【讨论】:

    • struts可以同时转换日期和时间吗?例如:'30/06/09 07:03'
    • 您应该将其作为一个问题提出,因为答案是明确的。 TL;DR 是的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    相关资源
    最近更新 更多