猜一下
第一个 把 companyName 本身当作一个String对象赋给property
第二个 引用了companyName变量

解决方案 »

  1.   

    ---------------------
    quote:
    我的Form中有VO一个company(其中有一个companyName String型属性)对象及一个companyName String型属性当我jsp中如下时,正常
    <html:text  property="compnayName"/>
    但当我这样写是就说找不到get,set方法
    <html:text  property="company.compnayName"/>
    ---------------------------------
    不知道你是要干什么,<html:text property="compnayName"/>这是生成一个文本框,类似于
    html中的<input type="text" name="compnayName">,你可以在struts-config.xml文件找到你的这个FormBean里面肯定有个
      <form-bean name="*" type="org.apache.struts.validator.DynaValidatorForm">
                <form-property name="compnayName" type="java.lang.String" />
      </form-bean>
    配置文件是和你界面上显示的是对应的,这样以后就可以在action里面用
    String compnayName = form.getString("compnayName");得到你输入的值,
    如果你Struts-config.xml里面字段属性是compnayName,那么你的
    <html:text  property="company.compnayName"/>是错误的。如果你想给这个文本框绑定值,那么你首先必须定义一个对象,也就是所谓的pojo,这个里面字段必须有get,set方法,不然就会报你说的这个错误,没有set和get方法。然后你在你的jsp页面里面通过执行action的传过来的值,定一一个bean,然后在用bean里面的字段。
    举例:..
    public abstract class AbstractTeacher  implements java.io.Serializable {
        // Fields         private String pk;
         private String name;
         private String isntavile;
        // Constructors    /** default constructor */
        public AbstractTeacher() {
        }    
        /** full constructor */
        public AbstractTeacher(String name, String isntavile) {
            this.name = name;
            this.isntavile = isntavile;
        }   
        // Property accessors    public String getPk() {
            return this.pk;
        }
        
        public void setPk(String pk) {
            this.pk = pk;
        }    public String getName() {
            return this.name;
        }
        
        public void setName(String name) {
            this.name = name;
        }    public String getIsntavile() {
            return this.isntavile;
        }
        
        public void setIsntavile(String isntavile) {
            this.isntavile = isntavile;
        }
    public class Teacher extends AbstractTeacher implements java.io.Serializable {    // Constructors    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    /** default constructor */
        public Teacher() {
        }    
        /** full constructor */
        public Teacher(String name, String isntavile) {
            super(name, isntavile);        
        }
       
    }   
    假如我有一个action叫做
    findTeacher.do
    里面写了一些这样的代码
    ....
    Teacher t = teacherDAO.findByName("张三");
    request.setAttribute("zs",t);
    然后转到disDetailTeacher.jsp页面
    <html>
    <body>
    ...
       <bean:define id="teacher" name="t"/>
       //这个bean里面的name属性就是你action里面传过来的,他是一个Teacher对象
       //如果你要显示就可以如下方式
       <html:text property="name" value="${teacher.name}"/>
       //或者这样也行
       <html:text property="name" value="<bean:write name='teacher' properyt='name'/>"/>
       //如果你的Teacher对象里面没有定义name的get和set方法,那么就会报找不到get,set方法
    </body>
    </html>
      

  2.   

    首先谢谢楼上详细的讲解
    其实我没有用象你这样
    我用struts还属于学习状态,用struts用得比较简单
    我的配置是这样的
      <form-beans>
        <form-bean
          name="companyForm"
          type="com.owenlin.business.web.action.company.CompanyForm"
        />
      </form-beans>
    <action
          path="/saveCompany"
          type="com.owenlin.business.web.action.company.CompanyAction"
          name="companyForm"
          scope="request"
          input="failure"
          unknown="false"
          validate="false"
        >
          <forward
    ...................______________________________________________________________________
    pojo: company  确保有get,set companyNamepublic class Company implements Serializable {    /** identifier field */
        private String companyId;    /** nullable persistent field */
        private String compnayName;    /** nullable persistent field */
        private String description;     ...................    /** full constructor */
        public Company(String companyId, String compnayName, String description, String tradeName, String managerId, Long photoId, Float priorLevel, String website) {
            this.companyId = companyId;
            this.compnayName = compnayName;
            this.description = description;
            this.tradeName = tradeName;
            this.managerId = managerId;
            this.photoId = photoId;
            this.priorLevel = priorLevel;
            this.website = website;
        }    /** default constructor */
        public Company() {
        }    /** minimal constructor */
        public Company(String companyId) {
            this.companyId = companyId;
        }    /** 
         *            @hibernate.id
         *             generator-class="assigned"
         *             type="java.lang.String"
         *             column="company_id"
         *         
         */
        public String getCompanyId() {
            return this.companyId;
        }    public void setCompanyId(String companyId) {
            this.companyId = companyId;
        }    /** 
         *            @hibernate.property
         *             column="compnay_name"
         *             length="255"
         *         
         */
        public String getCompnayName() {
            return this.compnayName;
        }    public void setCompnayName(String compnayName) {
            this.compnayName = compnayName;
        }
    .....................
    ____________________________________________________________________
    companyForm:   public class CompanyForm extends BaseForm {
    private String action;
    private Company company;
    private String compnayName;
    private String description;



    public String getCompnayName() {
    return compnayName;
    }
    public void setCompnayName(String compnayName) {
    this.compnayName = compnayName;
    }
    public String getDescription() {
    return description;
    }
    public void setDescription(String description) {
    this.description = description;
    }
    public String getAction() {
    return action;
    }
    public void setAction(String action) {
    this.action = action;
    }
    public Company getCompany() {
    return company;
    }
    public void setCompany(Company company) {
    this.company = company;
    }
    ______________________________________________________________________
    companyActionpublic class CompanyAction extends BaseAction {
    protected final Log log = LogFactory.getLog(getClass());
    public ActionForward execute(ActionMapping map, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
    CompanyForm cform=(CompanyForm)form;
    CompanyManager cManager=(CompanyManager)getBean("companyManager");
    cManager.saveObject(cform.getCompany());
    return map.findForward("success");
    }
    }
    __________________________________
    companyForm中的companyName只是我做测试用的
    我本来想只要一个company对象就行了
    这样action就好简单,接收jsp传来的company对象就往后台程序service扔就行了我原来也有一些struts开发经验,是在一个大项目中,很多配置工作别人都做好了。现在也有半年没有搞程序了,我记得当时的jsp文件是就写company.companyName就可以了最近又想找工作,才自己一个人练练,没想到遇到很多问题,其实是因为很多东西自己没有亲手试过,在大项目中就一个代码工人,呵呵
      

  3.   

    很久以前贴子,原电脑支持javascript有问题,所以再在才结,答案我自己发现了,是在form中初始化要 new 一个companycompanyForm:
    public class CompanyForm extends BaseForm {
    private String action;
    private Company company=new Company;  //就这样
    private String compnayName;
    private String description;很简单的问题,搞了很久,后来找了原来的代码看了看,就发现了