Hii Yaser,

Thank you for reply. my problem solved by add:

 @TypeConversion(type = ConversionType.APPLICATION, key = "java.util.Date", 
converterClass = DateConverter.class)

Regards


> On 26 Apr 2021, at 14.36, Yasser Zamani <yasserzam...@apache.org> wrote:
> 
> Hi thanks for reaching out!
> 
> I don't remember and should check that your desired behavior used to work or 
> not but as a quick answer I think you're looking for Class wide conversion 
> [1] e.g. @TypeConversion(type = ConversionType.APPLICATION, property = 
> "java.util.Date", DateConverter.class)?
> 
> Regards.
> 
> [1] https://struts.apache.org/core-developers/type-conversion-annotation.html
> 
> On 2021/04/25 20:02:47, M Huzaifah <mhuzaifah.i...@gmail.com> wrote: 
>> Hy guys,
>> 
>> i found somethin strange with StrutsTypeConverter.
>> let say i have a converter like this:
>> 
>> 
>> //------------------ begin DateConverter class ---------------
>> import java.text.ParseException;
>> import java.text.SimpleDateFormat;
>> import java.util.Date;
>> import java.util.Map;
>> 
>> import javax.annotation.PostConstruct;
>> 
>> import org.apache.commons.lang.ArrayUtils;
>> import org.apache.commons.lang.StringUtils;
>> import org.apache.struts2.util.StrutsTypeConverter;
>> 
>> public class DateConverter extends StrutsTypeConverter {
>>      
>>      private  String shortDateFormat;
>>      
>>      @PostConstruct
>>      public void loadFormat() {
>>              this.shortDateFormat = "dd/MM/yyyy";
>>      }
>> 
>>      @SuppressWarnings("unused")
>>      @Override
>>      public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
>>              
>>              System.out.println("begin converter");
>> 
>>              if(ArrayUtils.isEmpty(arg1) || StringUtils.isEmpty(arg1[0])) {
>>                      return null;
>>              }
>> 
>>              Date date = null;
>>              
>>              try {
>>                      //cek kalo formatnya dd/MM/yyyy hh:mm:ss
>>                      if(arg1[0].contains(" ")) {
>>                              this.shortDateFormat = "dd/MM/yyyy hh:mm:ss";
>>                              date = new 
>> SimpleDateFormat(shortDateFormat).parse(arg1[0]);
>>                      }else {
>>                              date = new 
>> SimpleDateFormat(shortDateFormat).parse(arg1[0]);
>>                      }
>>              }catch (ParseException e) {
>>                      System.out.println("DateConverter StrutsTypeConverter 
>> gagal parsing date;");
>>                      e.printStackTrace();
>>              }
>> 
>>              System.out.println("end converter");
>>              return date;
>>      }
>> 
>>      @Override
>>      public String convertToString(Map arg0, Object arg1) {
>> 
>>              System.out.println("begin converter to string");
>>              if(arg1 instanceof Date) {
>>                      System.out.println("end converter to string");
>>                      return new 
>> SimpleDateFormat(shortDateFormat).format((Date) arg1);
>>              }
>> 
>>              System.out.println("end converter to string");
>>              return StringUtils.EMPTY;
>>      }
>> 
>>      
>>      
>> }
>> 
>> //------------------ end DateConverter class ---------------
>> 
>> 
>> 
>> and in my action class, i have 2 property. one of them is Date type. and 
>> other one is Pojo which one of that Pojo property have a Date type. so my 
>> action look like this
>> 
>> 
>> //------------------ begin MasterPatienAction class ---------------
>> 
>> @Namespace("/patient")
>> @ParentPackage("app-default")
>> @Conversion(conversions = {
>>              @TypeConversion(key = "birthDate", converterClass = 
>> DateConverter.class)
>> })
>> public class MasterPatientAction extends BaseAction {
>> 
>>      /**
>>       * 
>>       */
>>      private static final long serialVersionUID = 1L;
>> 
>>      private static transient Logger log = 
>> Logger.getLogger(MasterPatientAction.class);
>>      
>>      
>>      Patient patient;
>>      List<Patient> listPatient;
>>      Date birthDate;
>>      
>>      @Action(value = "init", results = {
>>                      @Result(name = "success", location = 
>> "/pages/pasient-main.jsp"),
>>                      @Result(name = "error", location = 
>> "/pages/pasient-main.jsp"),
>>                      @Result(name = "input", location = 
>> "/pages/pasient-main.jsp")
>>      })
>>      public String init() {
>>              log.info("begin execute method init");
>>              
>>              log.info("end execute method init");
>>              return SUCCESS;
>>      }
>> 
>>      @Action(value = "search", results = {
>>                      @Result(name = "success", location = 
>> "/pages/pasient-main.jsp"),
>>                      @Result(name = "error", location = 
>> "/pages/pasient-main.jsp"),
>>                      @Result(name = "input", location = 
>> "/pages/pasient-main.jsp")
>>      })
>>      public String search() {
>>              log.info("begin execute method search");
>>              
>>              if(birthDate!=null) {
>>                      patient.setPatientBirthDate(birthDate);
>>              }
>>              
>>              try {
>>                      listPasien = service.search(patient);
>>              } catch (DnaException e) {
>>                      setMessageError("error caused : "+e.getMessage());
>>                      return ERROR;
>>              }
>>              
>>              log.info("end execute method search");
>>              return SUCCESS;
>>      }
>> 
>>      //--setter getter
>> }
>> 
>> 
>> //------------------ end MasterPatienAction class ---------------
>> 
>> 
>> let say my pojo like this:
>> 
>> 
>> //------------------ begin Patient pojo class ---------------
>> 
>> public class Patient {
>>      private integer patientId;
>>      private String patientName;
>>      private String patientCode;
>>      private Date patientBirthDate;
>> 
>>      //setter and getter goes here
>> 
>> }
>> 
>> //------------------ end Patient pojo class ---------------
>> 
>> 
>> for the first case, in my JSP, i use struts tag :
>> <s:textfield name="birthDate" class="form-control form-control-sm text-md 
>> datepicker" placeholder="Birth Date dd/MM/yyyy"/>
>> 
>> until here, i dont have a problem with it. i can convert my date string 
>> (with format dd/MM/yyyy e.g 20/01/2021) from JSP to the action class with 
>> this step:
>> 1. request /patient/init (to show jsp)
>> 2. insert value in text field with format dd/MM/yyyy e.g 20/01/2021
>> 3. submit with action to /patient/search
>> 4. in action class date converted successful on search method
>> 5. return success from action class
>> 6. text birthDate still the same (e.g 20/01/2021)
>> 
>> here the second case, when i want to convert my date type in my Pojo
>> so, i change my typeConversion key to : patient.patientBirthDate and also in 
>> my textfield tag on JSP i change name to patient.patientBirthDate. so this 
>> is what i change:
>> 1. change key in TypeConvertion annotation to key = 
>> "patient.patientBirthDate"
>> 2. change textfield tag in jsp to <s:textfield 
>> name="patient.patientBirthDate" />
>> 
>> when i follow step in first case:
>> 1. request /patient/init (to show jsp)
>> 2. insert value in text field with format dd/MM/yyyy e.g "20/01/2021"
>> 3. submit with action to /patient/search
>> 4. in action class date converted successfull
>> 5. return success from action class
>> 6. but my textfield with name patient.patientBirthDate in JSP change to 
>> "1/20/21" (the value should not change. it should be "20/01/2021") also in 
>> my console i dont see "begin converter to string" printed which i put in 
>> convertToString method in converter class.
>> 
>> i use <struts-version>2.5.22</struts-version>
>> 
>> could someone explain to me and how can i fix it.
>>                                                      
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
>> For additional commands, e-mail: user-h...@struts.apache.org
>> 
>> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
> For additional commands, e-mail: user-h...@struts.apache.org
> 

Reply via email to