单击保存后,输入文本字段未刷新数据库中的文本字段

时间:2018-12-16 12:43:51

标签: java

我正在实体类中为属性@Encrypted使用name注释,该注释用于name的加密和解密目的。我的实体类如下所示。

@XmlRootElement(name = "student")
@Entity
@Table(name = "Student")
@Audited
@EntityListeners(EncryptionAspect.class)
public class Student extends BaseDomain {

    ......
    @Column(name = "STUDENTNAME")
    @Encrypted
    private String studentName;

   .... //followed by other attriubtes with constructor and getters and setters


}

我的EncryptionAspect类如下所示

@Aspect
public class EncryptionAspect {

    @PrePersist
    @PreUpdate
    public void encryptData(Object data) throws IllegalArgumentException,
            Exception {

            //Encryption logic here using reflection

    }

    @PostLoad
    @PostUpdate
    public static void decryptData(Object data) throws Exception {

           //Decryption logic here using reflection

    }
}

输入文本字段中的名称将以加密形式存储在数据库中。当它显示在应用程序中时,它将采用解密格式。加密和解密在除注册表之外的所有地方都可以正常工作。问题是在注册新学生时,输入学生姓名的字段在单击保存按钮时突然显示加密的字符串。但是,当我返回到注册学生列表页面并单击新注册的名称时,将打开同一注册页面以仅在名称字段中使用解密的名称进行编辑。唯一的问题是注册一个新的。我认为这是因为单击保存按钮时字段中的名称正试图保留。但是在持久化之前,由于我的Aspect类,它将通过我的加密逻辑。同时,名称字段正在用我不想要的加密字段刷新。我希望它仅使用解密的文件刷新。我相信,如果持久化后从数据库中加载该字段,那么它将仅显示解密的名称。那么如何做到这一点。

输入名称字段的JSF代码如下

<t:inputText id="Name" styleClass="form-control"    disabled="#{!RegistrationForm.regStart}"
                                            maxlength="20" 
                                            value="#{RegistrationForm.student.studentName}">
                                        <a4j:support ajaxSingle="true" event="onchange"/> 
                                        <a4j:support ajaxSingle="true" event="onkeyup"/> 
                                            </t:inputText>

只有在我的Aspect类中的一些注释帮助下,持久化后才可以刷新文本字段。

0 个答案:

没有答案