나는 새 사용자를 추가하거나 사용자를 업데이트하기위한 양식이 표시된 경우이를 표시하는 jsp를 내보기로 사용합니다. 사용자가 선택되면 양식을 미리 채우는 방법을 알 수 없습니다. 같은 양식으로 2 가지 작업을 사용하는 솔루션에 대해 읽었으며 그 중 하나는 필드를 채우는 데 사용되고 데이터는 제출하는 데 사용됩니다. 그러나 jsp를로드 할 때 내 액션 (양식의 작업 속성에 정의 된 액션)이 호출되지 않기 때문에이 기능은 실제로 작동하지 않습니다. 메뉴 및 페이지는 XML 파일). 내 jsp에서 두 번째 작업을 지정하는 방법과 jsp를 처음로드 할 때 작업이 호출되도록하는 방법을 이해할 수 없습니다. 가능한 경우 AJAX와 관련없는 해결책을 선호합니다. 감사.Struts1에 양식 미리 채우기
4
A
답변
8
Struts의 힘을 얻었을 때 왜 AJAX로 가고 싶습니까? 나는 당신을 위해 간단한 예제를 가지고있다.
MyForm.java
package com.tusar.action;
import java.io.Serializable;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;
public class MyForm extends ActionForm implements Serializable{
private static final long serialVersionUID = 1043346271910809710L;
private String fullName = null;
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
/*This method will be called when you press the reset button
or load the form. You may want to populate the form here also*/
public void reset(ActionMapping mapping, HttpServletRequest request){
String reset = (String)request.getAttribute("myForm.reset");
if ((null != reset)|| ("true".equals(reset))) {
fullName = null;
}
}
}
MyFormSetupAction.java
package com.tusar.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class MyFormSetupAction extends Action{
/*Set your form-bean properties here*/
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
MyForm hwForm = (MyForm) form;
hwForm.setFullName("tusar");
return mapping.findForward("success");
}
}
MyFormSuccessAction.java
package com.tusar.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class MyFormSuccessAction extends Action{
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
return mapping.findForward("success");
}
}
스트럿-config.xml의
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<!-- ==================== Form Bean Definitions -->
<form-beans>
<form-bean name="myForm" type="com.tusar.action.MyForm">
<form-property name="fullName" type="java.lang.String"/>
</form-bean>
<!-- ============= Global Forward Definitions -->
<global-forwards>
<!-- Default forward to "Welcome" action -->
<!-- Demonstrates using index.jsp to forward -->
<forward name="home" path="/home.do"/>
</global-forwards>
<!-- ===================== Action Mapping Definitions -->
<action-mappings>
<!-- This action will load the form-->
<action path="/home"
type="com.tusar.action.MyFormSetupAction"
name="myForm"
validate="false"
input="/WEB-INF/jsp/home.jsp">
<forward name="success" path="/WEB-INF/jsp/home.jsp" />
</action>
<!-- This action will evalutae the form and pass form data to
success page-->
<action path="/successAction"
type="com.tusar.action.MyFormSuccessAction"
name="myForm"
validate="true"
input="/WEB-INF/jsp/home.jsp">
<forward name="success" path="/WEB-INF/jsp/success.jsp" />
</action>
</action-mappings>
<!-- ============= Message Resources Definitions -->
<message-resources parameter="MessageResources" />
</struts-config>
home.jsp
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page isELIgnored="false"%>
<html>
<head>
<title>Struts 1</title>
</head>
<body>
<html:form action="/successAction.do">
Name:
<html:text property="fullName"></html:text>
<html:submit value="Next"></html:submit>
<html:reset value="Cancel"></html:reset>
</html:form>
</body>
</html>
success.jsp
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page isELIgnored="false"%>
<html>
<head>
<title>Successful !</title>
</head>
<body>
<h3>Your details:</h3>
Name:
<bean:write name="myForm" property="fullName" />
</body>
</html>
매번 당신이 home.do 조치는 fullName의 속성이 "tusar"로 채워집니다 호출합니다. 더 이상의 연관성이 필요하면 의견을 말하면 기꺼이 도와 드리겠습니다. 감사!
0
여기가 이어야합니다.은 사용자를 선택할 때 호출되는 작업입니다. 액션을 앞으로 돌려 보내기 전에 해당 사용자의 속성을 액션 폼에 복사해야합니다.
구성 정보가 없으면 그 이상으로 도울 수 없습니다.
이 코드는 Struts 1에서 사용자가 이름을 가진 양식을 얻는 순간 악몽처럼 보입니다. ( –
@tusar : 여러 페이지 양식에 문제가 있습니다. (편집 모드에서) 사용자가 변경 한 사항을 고려하지 않고 양식을 다시 채우는 버튼을 클릭하면됩니다. – Sefran2
@Cricket, 안녕하세요! 브라우저에서 캐싱으로 인해 문제가 발생하고 있습니다. 사용 중지 할 수있는 해킹이 있습니다. 브라우저에서 캐싱 (캐시 용 응답 헤더 설정 등) – tusar