2014-02-06 2 views
0

Я не могу узнать, что я делаю неправильно.Отсутствие метода getter для свойства ... error

Я получаю эту ошибку:

javax.servlet.jsp.JspException: No getter method for property: "firstname" of bean: "org.apache.struts.validator.DynaValidatorForm" 
    at org.apache.struts.taglib.TagUtils.lookup(TagUtils.java:915) 
    at org.apache.struts.taglib.html.BaseFieldTag.prepareValue(BaseFieldTag.java:126) 
    at org.apache.struts.taglib.html.BaseFieldTag.renderInputElement(BaseFieldTag.java:102) 
    at org.apache.struts.taglib.html.BaseFieldTag.doStartTag(BaseFieldTag.java:80) 
    at org.apache.jsp.login_jsp._jspx_meth_html_005ftext_005f1(login_jsp.java:1095) 
    at org.apache.jsp.login_jsp._jspx_meth_html_005fform_005f1(login_jsp.java:1040) 
    at org.apache.jsp.login_jsp._jspService(login_jsp.java:759) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

в файле распорка-config.xml, когда используется Таг:

<form-bean name="sendContactForm" type="org.apache.struts.validator.DynaValidatorForm"> 
      <form-property name="firstname" type="java.lang.String" initial="firstname"/> 
      <form-property name="lastname" type="java.lang.String" initial="lastname"/> 
      <form-property name="emailaddress" type="java.lang.String" initial="email"/> 
      <form-property name="subject" type="java.lang.String" initial="subject"/> 
      <form-property name="comments" type="java.lang.String" initial="comments"/> 
     </form-bean> 

, а также:

<action path="/sendContactForm" attribute="sendContactForm" input="/login.jsp" 
      name="sendContactForm" scope="request" parameter="reqCode" 
      type="org.springframework.web.struts.DelegatingActionProxy" validate="true"> 
      <forward name="sendcontacts" path="/login.jsp"/> 
     </action> 

в ActionForm у меня есть :

public class ContactAction extends DynaValidatorActionForm { 

    private static Logger log = Logger.getLogger(ContactAction.class); 


public ActionForward sendContactForm(ActionMapping mapping, ActionForm form, 
      HttpServletRequest req, HttpServletResponse resp) throws Exception { 
      log.debug("ContactForm--start"); 


DynaValidatorActionForm sendContactForm = (DynaValidatorActionForm) form; 
ActionMessages messages = new ActionMessages(); 

String firstName = ((String) sendContactForm.get("firstname")); 
String lastName = ((String) sendContactForm.get("lastname")); 
String emailAddress = ((String) sendContactForm.get("emailaddress")); 
String subject = ((String) sendContactForm.get("subject")); 
String comments = ((String) sendContactForm.get("comments")); 
return mapping.findForward("sendcontacts"); 

В файле JSP у меня есть:

<html:form action="/sendContactForm.do?ContactCd=sendContactForm" method="post" styleId="sendContactForm"> 
    <c:set var="sendContactForm" value="${sendContactForm}" /> 

    <html:errors/>   



     <label for="firstname">First Name <span class="asterisk">*</span> 
     </label> 
      <html:text styleId="firstname" property="firstname" styleClass="form-control tip required" name="sendContactForm" /> 



     <label for="lastname">Last Name <span class="asterisk">*</span> 
     </label> 
     <html:text styleId="lastname" property="lastname" styleClass="form-control tip pplaceholder" name="sendContactForm"/> 



     <label for="emailaddress">Email Address <span class="asterisk">*</span> 
     </label> 
     <html:text styleId="emailaddress" property="emailaddress" styleClass="form-control tip pplaceholder" name="sendContactForm" /> 


     <label for="subject">Subject <span class="asterisk">*</span> 
     </label> 
     <html:text styleId="subject" property="subject" styleClass="form-control tip pplaceholder" name="sendContactForm"/> 

      <label for="comments">Comments <span class="asterisk">*</span> 
     </label> 
     <html:textarea styleId="comments" property="comments" styleClass="form-control tip pplaceholder" name="sendContactForm"></html:textarea> 

</html:form> 

Я исследовал много, но не успех еще.

Итак, что случилось? Спасибо.

ответ

0

Major UPDATE:

Я попробовал ваш код с изменениями, которые я упомянул здесь, и страница Войти со всеми этими пятью полями становятся отображаются с их по умолчанию начальные значения, которые были даны в определении форм-бобов , При отображении страницы ошибок нет.

Еще одно замечание заключается в том, что ваш login.jsp не имеет кнопки отправки, и вы не все отправляете форму, поэтому элемент управления никогда не входит в ваш класс действий.

Это вход.JSP

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Login Form</title> 
</head> 
<body> 
<html:form action="/sendContactForm.do?ContactCd=sendContactForm" 
     method="post" styleId="sendContactForm"> 
     <c:set var="sendContactForm" value="${sendContactForm}" /> 

     <html:errors /> 



     <label for="firstname">First Name <span class="asterisk">*</span> 
     </label> 
     <html:text styleId="firstname" property="firstname" 
      styleClass="form-control tip required" name="sendContactForm" /> 



     <label for="lastname">Last Name <span class="asterisk">*</span> 
     </label> 
     <html:text styleId="lastname" property="lastname" 
      styleClass="form-control tip pplaceholder" name="sendContactForm" /> 



     <label for="emailaddress">Email Address <span class="asterisk">*</span> 
     </label> 
     <html:text styleId="emailaddress" property="emailaddress" 
      styleClass="form-control tip pplaceholder" name="sendContactForm" /> 


     <label for="subject">Subject <span class="asterisk">*</span> 
     </label> 
     <html:text styleId="subject" property="subject" 
      styleClass="form-control tip pplaceholder" name="sendContactForm" /> 

     <label for="comments">Comments <span class="asterisk">*</span> 
     </label> 
     <html:textarea styleId="comments" property="comments" 
      styleClass="form-control tip pplaceholder" name="sendContactForm"></html:textarea> 

    </html:form> 


</body> 
</html> 

Банки используются

struts-taglib-1.3.10.jar,struts-core-1.3.10.jar,jstl-1.2.jar,commons-validator-1.3.1.jar, commons-logging-1.0.4.jar,commons-digester-1.8.jar,commons-chain-1.2.jar,commons-beanutils-1.8.0.jar,antlr-2.7.2.jar

Следующая домен высшего уровня помещаются внутри моего WEB-INF

struts-bean.tld, struts-html.tld,struts-logic.tld

Если у вас есть какие-либо проверки, validation.xml могут также присутствовать в WEB-INF

ContactAction.java [в текущем случае управление не приходит сюда]

public class ContactAction extends Action { 

    @Override 
    public ActionForward execute(ActionMapping mapping, ActionForm form, 
      HttpServletRequest req, HttpServletResponse resp) throws Exception { 

     DynaValidatorForm sendContactForm = (DynaValidatorForm) form; 
     ActionMessages messages = new ActionMessages(); 

     String firstName = ((String) sendContactForm.get("firstname")); 
     String lastName = ((String) sendContactForm.get("lastname")); 
     String emailAddress = ((String) sendContactForm.get("emailaddress")); 
     String subject = ((String) sendContactForm.get("subject")); 
     String comments = ((String) sendContactForm.get("comments")); 
     return mapping.findForward("sendcontacts"); 
    } 
} 

Предыдущие правки Использование sendContactForm.get("firstname") является правильным, так как вы используете DynaValidatorForm.

Ошибка в том, что ваш класс действия расширяет неправильный класс.

public class ContactAction extends DynaValidatorActionForm 

Это неправильно. Вам нужно расширить Action класс именно:

public class ContactAction extends Action 

Кроме того, вместо

DynaValidatorActionForm sendContactForm = (DynaValidatorActionForm) form; 

использования

DynaValidatorForm sendContactForm = (DynaValidatorForm) form; 

Update: В классе действий,

что этот метод имя - sendContactForm? Есть ли причина для этого?

public ActionForward sendContactForm 

Почему вы не измените его на public ActionForward execute

+0

Я тоже это пробовал. Не решил проблему. В браузере он перестает показывать поля после emailaddress, но в консоли говорится, что метод getter для свойства: «firstname» !! – Mark

+0

По умолчанию будет вызываться getFirstname(). Когда вы ставите точки отладки внутри класса actin, вы видите вещи как ожидалось? – spiderman

+0

Я попробую и дам вам знать – spiderman

0

Я стреляю в темноте здесь (не очень хорошо разбираюсь в расположении), но похоже, что вы вызываете функцию getter [((String) sendContactForm.get («firstname»));] из какого-то компонента и его не дает никакой функции геттера. Итак, вы создали функцию getter для «firstname»?

+0

нет, я этого не сделал. Он использовал это для функции геттера. – Mark

+0

Вы сохраняете данные, полученные от JSP? Вместо «sendContactForm.Get()» попробуйте использовать «sendContactForm.getParameter()». – AngularHarsh

+0

Или вы можете пропустить файл Bean, как я уже сказал. Что-то вроде этого. public class UploadForm расширяет ActionForm { защищенный String myText; protected FormFile myFile; public void setMyText (текст строки) { myText = текст; } public String getMyText() { return myText; } public void setMyFile (файл FormFile) { myFile = файл; } public FormFile getMyFile() { return myFile; } } – AngularHarsh

0

Хорошо. У вас возникли проблемы.

Попробуйте это.

Вместо использования "String firstName = ((String) sendContactForm.get (" firstname "));"

Используйте этот

Строка ПгвЬЫате = req.getParameter ("FirstName"));

Это решит вашу проблему. Попробуй.

+0

Я пробовал это. Не удалось решить мою проблему :( – Mark

0

Я не очень много используется для DynaActionForms, всегда ActionForm.

Просто из любопытства, он работает, если вы меняете firstname на firstName в определении формы и во всех других местах, в которых вы ссылаетесь?

Смежные вопросы