0

嘿,我正在使用以下代码来创建用户想要的文本字段数量

<h:form>

<p>Number Of News <h:inputText value="#{news.noOfFields}" /></p>


        <ui:repeat value="#{news.values}" var="item">
        <hr/>
            News #{item.no} &nbsp;&nbsp;&nbsp;
             <h:inputText value="#{item.news}" /><br/>
        </ui:repeat>

        <hr/>
        <h:commandButton styleClass="btn btn-blue" action="#{news.submit}" value="Save" />

</h:form>

托管 bean news 有一个类 News 为

    @ManagedBean
@SessionScoped
public class News
{
        private String noOfFields;
        private List<NewsVO> values;

        public News()
        {
            this.values = new ArrayList<NewsVO>();
        }

        public String submit() {

            for(NewsVO newsVO : this.values)
            {
                System.out.println(newsVO.getNews());
                System.out.println(newsVO.getNo());
            }
            return null;
            // save values in database
        }

        public String getNoOfFields() {
            return noOfFields;
        }



        public List<NewsVO> getValues() {
            return values;
        }

        public void setValues(List<NewsVO> values) {
            this.values = values;
        }

        public void setNoOfFields(String noOfFields) {
            this.values = new ArrayList<NewsVO>();
            try {
                for(int i=0;i<Integer.valueOf(noOfFields);i++)
                {
                    NewsVO newsVO = new NewsVO();
                    newsVO.setNo(i+1);
                    this.values.add(newsVO);
                }
                this.noOfFields = noOfFields;
            }
            catch(NumberFormatException ex) {
                /*values = new String[1];*/
                noOfFields = "1";
            }
        }


}

NewsVO 只是一个 javaBean 类,如下所示

 public class NewsVO 
    {
    public int no;
     public String news;


    public int getNo() {
        return no;
     }

    public void setNo(int no) {
         this.no = no;
     }

    public String getNews() {
        return news;
    }

    public void setNews(String news) {
        this.news = news;
    }
    }

问题是输入文本中的值不会在按下保存按钮时得到反映。它给了我空值,尽管我在所有文本字段中都写了一些东西。

<h:inputText value="#{item.news}" />
4

1 回答 1

0

每次按下提交按钮时,都会调用 bean 中的所有设置器(包括setNoOfFields())。在这个设置器中,您正在重置您的列表,这就是您失去价值观的原因。由于您只需要在大小发生变化时修改您的列表,因此这是一种简单的方法:

@ManagedBean
@SessionScoped
public class News
{
    private int noOfFields;
    private List<NewsVO> values;

    public News()
    {
        this.values = new ArrayList<NewsVO>();
    }

    public String submit()
    {
        for(NewsVO newsVO : this.values)
        {
            System.out.println(newsVO.getNews());
            System.out.println(newsVO.getNo());
        }

        return null;
        // save values in database
    }

    public int getNoOfFields()
    {
        return noOfFields;
    }

    public List<NewsVO> getValues()
    {
        return values;
    }

    public void setValues(List<NewsVO> values)
    {
        this.values = values;
    }

    public void setNoOfFields(int noOfFields)
    {
        if(noOfFields < this.noOfFields)
        {
            for(int i = this.noOfFields - 1;i >= noOfFields;i--)
            {
                getValues().remove(i);
            }
        }
        else if(noOfFields > this.noOfFields)
        {
            for(int i = this.noOfFields;i < noOfFields;i++)
            {
                NewsVO newsVO = new NewsVO();
                newsVO.setNo(i+1);

                getValues().add(newsVO);
            }
        }
    }
}

注意:我还将您的noOfFieldsgetter/setter 更改为 simple int,JSF 将为您进行转换。

于 2013-06-03T10:08:56.650 回答