سؤال

هل يمكنني إضافة مكونات JSF ديناميكيًا؟ أحتاج إلى الحصول على نموذج مع زر يجب أن يضيف أحد <h:inputText> إلى النموذج. هل هذا ممكن؟

أعلم أن هذا يجب أن يكون ممكنًا في JavaScript بطريقة ما. هل يعرف أي شخص كيفية القيام بذلك في JSF؟ أعتقد أن المشكلة الرئيسية هي كيف أحصل أو ضبط قيم المدخلات الجديدة عبر #{value}.

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

المحلول

استخدم مكون تكرار مثل <h:dataTable> أو <ui:repeat> لعرض حجم ديناميكي List من الكيانات. اصنع الفول @ViewScoped لضمان تذكر القائمة عبر Postbacks على نفس العرض بدلاً من إعادة إنشاء مرارا وتكرارا.

مثال انطلاق مع <h:dataTable>:

<h:form>
    <h:dataTable value="#{bean.items}" var="item">
        <h:column><h:inputText value="#{item.value}" /></h:column>
        <h:column><h:commandButton value="remove" action="#{bean.remove(item)}" /></h:column>
    </h:dataTable>
    <h:commandButton value="add" action="#{bean.add}" />
    <h:commandButton value="save" action="#{bean.save}" />
</h:form>

الفاصوليا المدارة:

@ManagedBean
@ViewScoped
public class Bean {

    private List<Item> items;

    @PostConstruct
    public void init() {
        items = new ArrayList<Item>();
    }

    public void add() {
        items.add(new Item());
    }

    public void remove(Item item) {
        items.remove(item);
    }

    public void save() {
        System.out.println("items: " + items);
    }

    public List<Item> getItems() {
        return items;
    }

}

نموذج:

public class Item {

    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String toString() {
        return String.format("Item[value=%s]", value);
    }

}

أنظر أيضا:

نصائح أخرى

يجب أن يكون هكذا

ربط علامة نموذج إلى خاصية الفول


<form binding="#{myBean.myform}">...</form>

@ManagedBean("myBean")
public class Bean{
   property HtmlForm myform;
}

في الحدث ، قم بإنشاء مثيل جديد لمكون الإدخال

HtmlInputText input=new HtmlInputText();

وإرفاق النموذج الخاص بك

myform.getChildren().add(input);

يستخدم h:dataTable لإضافة عناصر ديناميكيًا ... احصل على قائمة من أي نوع تريد تقديم قيم لـ DataTable ...

في h:dataTable... يمكنك تضمين علامة العنصر لإنشاء الداخل <h:column>

سيتم استخدامه لإنشاء عناصر تريد إنشاؤها ديناميكيًا.

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