Датедиф считает, как часто граница пересекается.
SELECT DATEPART(WEEK, '20190104 23:01:11.821')
, DATEPART(WEEK, '20190106 23:01:11.821')
Возвращает
1 2
Итак, одна недельная граница была пересечена, поэтому datediff возвращает 1.
Для этого нужно использовать одну и ту же форму действия для обоих действий. Есть ли конкретная причина, по которой вам нужны две разные формы действий? Если нет, попробуйте изменить второе сопоставление действий на name = "formA" и само действие, чтобы использовать FormA, а не FormB.
Похоже, это может стать беспорядочным, я бы оставил это простым и использовал ActionForm
только для хранения данных Request
.
public class FormA extends ActionForm {
public int intA;
public int commonInt;
}
После отправки Запроса
извлеките данные из ActionForm
и поместите их куда-нибудь в сеанс, либо напрямую, либо в хранилище данных внутри сеанса, чтобы сохранить это вид информации.
public class ActionTo extends DispatchableAction {
public ActionForward recv(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response) {
FormA form = (FormA)form;
DataHolder dataHolder = request.getSession().getAttribute("dataHolder");
dataHolder.setCommonInt(commonInt);
dataHolder.setIntA(intA);
return mapping.findForward("send");
}
}
В идеале, если вы не слишком много инвестируете в Struts 1, я бы взглянул на Struts 2.
Том, используя ваше решение и объединив его с ActionRedirect , предложенным Винсентом Рамдани, я тоже получил то, что вы хотели.
Код очень прост и позволяет вам иметь отдельные формы для каждого действия.
ActionRedirect redirect = new ActionRedirect(mapping.findForward("send"));
redirect.addParameter("commonInt", formA.getCommonInt());
return redirect;
formB.setCommonInt(request.getParameter("commonInt"));
Это в конечном итоге спасло меня и помогло мне не прилагать усилий, чтобы изменить это прямо в JSP, что было бы ужасно.