سؤال

لدي كائن في النموذج الذي يحتوي على خصائص سلسلة مختلفة.

عندما أرغب في طباعته في نموذج JSP الخاص بي ، يمكنني القيام بذلك

<c:out value="${form.company.address}" />

الذي يعمل تماما.

الآن أريد إنشاء حقل إدخال HTML. لكن عندما أكتب

<html:text property="company.address" />

أحصل على خطأ في القول

Caused by: javax.servlet.jsp.JspException: No getter method for property company.address of bean org.apache.struts.taglib.html.BEAN

هل تعرف كيف يمكنني إنشاء حقل إدخال HTML مع عنوان شركتي؟

حصلت على الفول الخاص بي من السترات والمستقبين المقابلة.

هل كانت مفيدة؟

المحلول

الطريقة الصحيحة لترجمة هذا:

<c:out value="${UFForm.company.address}" />

إلى الدعامات ،

<html:text name="UFForm" property="company.address">

وهذا يعني أن هناك طلبًا بالاسم UFForm مع الفول الذي يحتوي على طريقة getCompany() (وهو ما أفترض عوائد أ Company الكائن) وهذا بدوره لديه ملف getAddress() getter (إذا فهمت ما أعنيه). باختصار ، الفول من الطلب/الجلسة UFForm, ، تاغليب يصل getCompany().getAddress();

ملاحظة أرجو ذلك getAddress() لا يعود أ لا شيء آخر <html:text /> سوف يرمي استثناء.


يحرر لشرح ما فعلته أعلاه:

public class Company implements Serializable {

    private String address;

    //Setter
    public void setAddress(String address) {
        this.address = address;
    }

    //Getter
    public String getAddress() { return this.address; }
}

public class UFForm implements Serializable {

    private Company company;

    public void setCompany(Company company) {
        this.company = company;
    }

    public void getCompany() {
        if (this.company == null) {
            setCompany(new Company());
        }

        return this.company;
    }
}

ما فعلته أعلاه <html:text /> يعادل

UFForm ufForm = ....;
String property = ufForm.getCompany().getAddress();

نصائح أخرى

يجب أن يكون لدى Bean أساليب Setter و Getter المقابلة.

شكل HTML

<html:text property="name" size="10" maxlength="10">

الحبة المقابلة.

public class AddressForm 
{
  private String name=null;

  public void setName(String name){
    this.name=name;
  }

  public String getName(){
    return this.name;
  }
}

عندما تحصل على قيمة مربع النص مع:

<html:text property="company.address" />

أنت في الواقع تقول لدعامات القيام بها:

formObject.getCompany().getAddress();

لذلك يجب أن يكون لديك getter للشركة (والتي يجب عدم إرجاع NULL أو ستفشل العملية التالية) ومضيف للعنوان على كائن الشركة. يجب أن يكون المستقلين/getters عامة. يجب أن يكون هذا هو الحال بالفعل حيث يمكنك القيام بما يلي بدون خطأ:

<c:out value="${UFForm.company.address}" />

الآن ، الشيء الذي يزعجني هو هذا الجزء: ${UFForm.. عند استخدام JSTL ، يمكنك الوصول إلى النموذج بشكل صريح. مع ال <html:text> يمكنك الوصول إلى خاصية على النموذج ضمنيًا. يتم توفير هذا النموذج الضمني بواسطة المرفق <html:form> بطاقة شعار. هل لديك <html:text> داخل <html:form>?

يقع Form Bean/تم إنشاؤه/كشفه بناءً ActionMapping لذا تحقق من رسم الخرائط الخاص بك أيضا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top