Jsf 如何在内将的提交值设置为映射、设置或列表

Jsf 如何在内将的提交值设置为映射、设置或列表,jsf,input-field,uirepeat,Jsf,Input Field,Uirepeat,我想知道是否有可能将一个值从内部推送到地图、集合或列表 我想将的值传递给一个集合 代码: 你是说像这样吗 <p:inputText id="me" value="#{_par.input}"/> 你是说像这样吗 <p:inputText id="me" value="#{_par.input}"/> 我不确定我是否正确理解了你的要求。 我假设如下:您需要一些后端中的字符串列表和ui:repeat标记,以使用输入字段对这些字符串进行迭代以编辑它们。也许有一些语法问题,但

我想知道是否有可能将一个值从内部推送到地图、集合或列表

我想将的值传递给一个集合

代码:

你是说像这样吗

<p:inputText id="me" value="#{_par.input}"/>
你是说像这样吗

<p:inputText id="me" value="#{_par.input}"/>

我不确定我是否正确理解了你的要求。 我假设如下:您需要一些后端中的字符串列表和ui:repeat标记,以使用输入字段对这些字符串进行迭代以编辑它们。也许有一些语法问题,但我的想法应该很清楚:

public class Backend {
    private List<String> myStrings;

    public MyStringWrapper getMyStringWrapper(int index) {
        return new MyStringWrapper(index);
    }

    public class MyStringWrapper {
        private final int index;
        public MyStringWrapper(int index) { this.index = index; }
        public String getContent() { return myStrings.get(index); }
        public void setContent(String newContent) { myStrings.add(index, newContent); }
    }
}
在前端中,您可以按如下方式使用:

<ui:repeat var="_index" value="#{backend.getIndexSequence()}">
  <p:inputText value="#{backend.getMyStringWrapper(_index).content}"/>
</ui:repeat>

当然,您必须提供一个getIndexSequence方法,该方法生成从0到字符串大小的整数列表。

我不确定是否正确理解了您的要求。 我假设如下:您需要一些后端中的字符串列表和ui:repeat标记,以使用输入字段对这些字符串进行迭代以编辑它们。也许有一些语法问题,但我的想法应该很清楚:

public class Backend {
    private List<String> myStrings;

    public MyStringWrapper getMyStringWrapper(int index) {
        return new MyStringWrapper(index);
    }

    public class MyStringWrapper {
        private final int index;
        public MyStringWrapper(int index) { this.index = index; }
        public String getContent() { return myStrings.get(index); }
        public void setContent(String newContent) { myStrings.add(index, newContent); }
    }
}
在前端中,您可以按如下方式使用:

<ui:repeat var="_index" value="#{backend.getIndexSequence()}">
  <p:inputText value="#{backend.getMyStringWrapper(_index).content}"/>
</ui:repeat>
当然,您必须提供一个getIndexSequence方法,该方法生成从0到字符串大小的整数列表。

对于集合,这是不可能的,因为它不允许按索引或键引用项。但是,只需在输入值中指定列表索引和映射键,就可以使用列表和映射

列出:

值得注意的是,规范化方法是使用一个完整的JavaBean列表。让我们假设一个名为PAR的JavaBean类,它的属性ID和值精确地映射到DB中的PAR表,其中的列ID和值:

无论哪种方式,它在使用时都能很好地工作,它与PrimeFaces没有任何关系,在这个问题的上下文中,它只是一个基于jQuery的JSF UI组件库。只需将h:替换为p:即可启用。

使用集合,这是不可能的,因为它不允许按索引或键引用项。但是,只需在输入值中指定列表索引和映射键,就可以使用列表和映射

列出:

值得注意的是,规范化方法是使用一个完整的JavaBean列表。让我们假设一个名为PAR的JavaBean类,它的属性ID和值精确地映射到DB中的PAR表,其中的列ID和值:


无论哪种方式,它在使用时都能很好地工作,它与PrimeFaces没有任何关系,在这个问题的上下文中,它只是一个基于jQuery的JSF UI组件库。只需将h:替换为p:即可打开它。

Hi,问题是,如果变量中有多个项,该怎么办?因此,我需要一个集合或列表之类的东西。您描述的内容只存储单个字符串值。还是我误解了你?好吧,现在看看我的例子,如果_par是一个对象。这将是可行的,这确实是一种选择。要不是这样,我必须将字段inputText持久化到我的数据库中。它不适用于瞬态对象。在这种情况下_par只是一个字符串值列表,比如地图的键。对于文档搜索,inputText应该是一个非持久值。有什么想法吗。如果没有,我必须找到一个解决方法。嗨,问题是,如果变量中有多个项,怎么办?因此,我需要一个集合或列表之类的东西。您描述的内容只存储单个字符串值。还是我误解了你?好吧,现在看看我的例子,如果_par是一个对象。这将是可行的,这确实是一种选择。要不是这样,我必须将字段inputText持久化到我的数据库中。它不适用于瞬态对象。在这种情况下_par只是一个字符串值列表,比如地图的键。对于文档搜索,inputText应该是一个非持久值。有什么想法吗。如果没有,我必须找出一个解决方法。是否可以将一个值写入inputText,以及在第一种情况下如何将该值写入备份列表?我认为如果没有显式的clean getter和setter clean=而没有额外的参数,这是行不通的,不是吗?我完全不知道您在inputText中写入值是什么意思。您的意思是,您想保留/预先填充一些默认值吗?只需在createAndFillItSomehow中进行相应的工作。创建新的ArrayList。在其中设置所需的项,对于空输入可以为null,对于预填充了foo的输入可以为foo。或者,您的意思是更新模型值吗?JSF作为一个MVC框架已经自动做到了这一点。在命令链接/按钮的操作方法中,只需按常规方式访问列表或映射即可。提交的值已在其中更新。从逻辑上考虑,否则这个答案将毫无意义。是的,我需要更新模型值-很抱歉不准确。因此,我尝试了你的解决方案,它看起来比我下面的解决方案好得多,这是一个解决方案,因为我无法按照你的方式使用列表,并且在渲染输入字段时遇到了IllegalArgumentException。所以我顾
ess我遗漏了另一点…为什么不告诉我更多关于异常和堆栈跟踪的信息?它们本身就是完整的答案。如果您无法解释异常,您不应该像忽略装饰一样忽略它们,但您应该与我们共享它们。我们可以用外行的语言为你翻译。你知道,一旦理解了一个问题,解决方案就会变得非常明显。有没有可能在inputText中写入一个值?在第一种情况下,该值将如何写入备份列表?我认为如果没有显式的clean getter和setter clean=而没有额外的参数,这是行不通的,不是吗?我完全不知道您在inputText中写入值是什么意思。您的意思是,您想保留/预先填充一些默认值吗?只需在createAndFillItSomehow中进行相应的工作。创建新的ArrayList。在其中设置所需的项,对于空输入可以为null,对于预填充了foo的输入可以为foo。或者,您的意思是更新模型值吗?JSF作为一个MVC框架已经自动做到了这一点。在命令链接/按钮的操作方法中,只需按常规方式访问列表或映射即可。提交的值已在其中更新。从逻辑上考虑,否则这个答案将毫无意义。是的,我需要更新模型值-很抱歉不准确。因此,我尝试了你的解决方案,它看起来比我下面的解决方案好得多,这是一个解决方案,因为我无法按照你的方式使用列表,并且在渲染输入字段时遇到了IllegalArgumentException。所以我想我遗漏了另一点……为什么不告诉我们更多关于异常和堆栈跟踪的信息呢?它们本身就是完整的答案。如果您无法解释异常,您不应该像忽略装饰一样忽略它们,但您应该与我们共享它们。我们可以用外行的语言为你翻译。你知道,一旦理解了一个问题,解决方案就会变得非常明显。好吧,面对我正在使用JSF1.2这一事实,正如在上面的讨论中所发现的——很抱歉我没有提到它,这仍然是一种笨拙的方法吗?我需要没有附加参数的getter和setter方法。那么,对于JSF1.x,如何改进这一点呢?ThanksOk,面对我在上面的讨论中发现的使用JSF1.2的事实——很抱歉我没有提到它,它仍然是一种笨拙的方法吗?我需要没有附加参数的getter和setter方法。那么,对于JSF1.x,如何改进这一点呢?谢谢
private Map<String, String> map; // +getter (no setter necessary)

@PostConstruct
public void init() { 
    map = createAndFillItSomehow();
}
private List<Par> pars; // +getter (no setter necessary)

@PostConstruct
public void init() { 
    pars = createAndFillItSomehow();
}