Получение нулевого значения для дней, рассчитанных / добавленных текущей даты плюс введенное пользователем значение - PullRequest
0 голосов
/ 08 мая 2020

Получение нулевого значения для дней, рассчитанных / добавленных текущей даты плюс введенное пользователем значение

Мы вычисляем значение столбца на основе введенного пользователем значения ie Количество дней, введенных пользователем, плюс текущая дата .

private Date setdaysAttendanceApprovedWithAdditionalDays(int daysAttendanceApproved2) {

    Date currentDate = new Date();
    Calendar c = Calendar.getInstance();
    c.setTime(currentDate);

    c.add(Calendar.DATE, daysAttendanceApproved2);

    Date currentDatePlusUserInput = c.getTime();
    return currentDatePlusUserInput;
}

Желаемый результат

Если пользователь вводит значение 10, то 8 May 2020 Plus 10, в наборе NewDate

* 1009 будет выведено 18-May-2020 * Проблема

для setNewdate setdaysAttendanceApprovedWithAdditionalDays устанавливается значение null

<h:form>
<p:panel id="panel" header="New User">

    <h:panelGrid columns="3" cellpadding="5">
        <p:outputLabel for="Additional Days" value="Additionaldays:" />
        <p:inputText id="additionaldays" value="#{saveMB.attendanceApprovalEntity.daysAttendanceApproved}">
        </p:inputText>
    </h:panelGrid>

    <p:commandButton value="Save" actionListener="#{saveMB.approveAttendance}" />
</p:panel>
</h:form>

saveMB. java

@ManagedBean(name = "saveMB")
@ViewScoped
public class saveMB implements Serializable {
private static final long serialVersionUID = 1L;
private static final Logger logger = LoggerFactory.getLogger(saveMB.class);

private Integer daysAttendanceApproved;

public Integer getdaysAttendanceApproved() {
    return daysAttendanceApproved;
}

public void setdaysAttendanceApproved(Integer daysAttendanceApproved) {
    this.daysAttendanceApproved = daysAttendanceApproved;
}

private Date newdate;

public Date getNewdate() {
    return newdate;
}

public void setNewdate(Date newdate) {
    this.newdate = newdate;
}

private AttendanceFlow attendanceApprovalEntity;

public AttendanceFlow getattendanceApprovalEntity() {
    return attendanceApprovalEntity;
}

public void setattendanceApprovalEntity(AttendanceFlow attendanceApprovalEntity) {
    this.attendanceApprovalEntity = attendanceApprovalEntity;
}


@PostConstruct
public void init() {

    ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
    Map<String, String> params = externalContext.getRequestParameterMap();

}

private Date setdaysAttendanceApprovedWithAdditionalDays(int daysAttendanceApproved2) {

    Date currentDate = new Date();
    Calendar c = Calendar.getInstance();
    c.setTime(currentDate);

    c.add(Calendar.DATE, daysAttendanceApproved2);

    Date currentDatePlusUserInput = c.getTime();
    return currentDatePlusUserInput;
}

public void approveAttendance(AjaxBehaviorEvent event) {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    try {

        this.attendanceApprovalEntity.setNewdate(setdaysAttendanceApprovedWithAdditionalDays(this.attendanceApprovalEntity.getdaysAttendanceApproved())); 

    } catch (Exception e) {}

}
}

AttendanceFlow. java

@Entity
@Table(name = "ATTENDANCE_FLOW")
@NamedQuery(name = "AttendanceFlow.findAll", query = "SELECT h FROM AttendanceFlow h")
public class AttendanceFlow implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@SequenceGenerator(name = "ATTENDANCE_FLOW_ID_GENERATOR", sequenceName = "ATTENDANCE_FLOW_ID_SEQ", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ATTENDANCE_FLOW_ID_GENERATOR")
@Column(name = "ATTENDANCE_FLOW_ID")
private Integer AttendanceFlowId;

@Column(name = "DAYS_ATTENDANCE_APPROVED")
private Integer daysAttendanceApproved;

@Column(name = "NEW_DATE")
@Temporal(TemporalType.DATE)
private Date newdate;

public Date getNewdate() {
    return newdate;
}

public void setNewdate(Date newdate) {
    this.newdate = newdate;
}    

public Integer getAttendanceFlowId() {
    return AttendanceFlowId;
}

public void setAttendanceFlowId(Integer AttendanceFlowId) {
    this.AttendanceFlowId = AttendanceFlowId;
}

public Integer getdaysAttendanceApproved() {
    return daysAttendanceApproved;
}

public void setdaysAttendanceApproved(Integer daysAttendanceApproved) {
    this.daysAttendanceApproved = daysAttendanceApproved;
}

}

Во время отладки я могу найти значение

 this.attendanceApprovalEntity.getdaysAttendanceApproved   

ie введенное пользователем значение примерно 10, но я не смог продолжить после этого

Ответы [ 2 ]

2 голосов
/ 08 мая 2020

LocalDate::plusDays

Используйте LocalDate вместо устаревших Date и Calendar. Отметьте это для более подробной информации.

Сделайте это следующим образом:

private LocalDate setDaysAttendanceApprovedWithAdditionalDays(int daysAttendanceApproved) {
    LocalDate date = LocalDate.now();
    return date.plusDays(daysAttendanceApproved);
}

Быстрая демонстрация:

import java.time.LocalDate;

public class Main {
    public static void main(String[] args) {
        // Test
        System.out.println(setDaysAttendanceApprovedWithAdditionalDays(10));
    }

    static LocalDate setDaysAttendanceApprovedWithAdditionalDays(int daysAttendanceApproved) {
        LocalDate date = LocalDate.now();
        return date.plusDays(daysAttendanceApproved);
    }
}

Вывод:

2020-05-18

JPA и java .time

Удалить аннотацию @Temporal из атрибута. Также обратите внимание, что если вы используете JPA 2.1 или более раннюю версию, вам необходимо написать конвертер, как показано здесь . Если вы используете JPA 2.2 или новее, вам не нужен конвертер.

0 голосов
/ 08 мая 2020

Вместо этого используйте класс GregorianCalendar. Сегодняшнюю дату можно получить с помощью date=new GregorianCalendar(), а число, введенное пользователем, можно добавить с помощью date.add(Calendar.DAY_OF_MONTH,number).

...