当前位置: 首页 > 知识库问答 >
问题:

不处理ui:repeat内的h:inputText的值

广楚
2023-03-14

我想处理此表单(valueChangueListener在实际情况下无效)。

这是后台bean:

public class TestBean extends PrivateBaseBean implements Serializable {
private List<String> strings;

@PostConstruct
public void init() {
    strings = new ArrayList<String>();
    strings.add("");
    strings.add("");
    strings.add("");
}

public void saveAction(ActionEvent event) {

    StringBuilder textToShowInMessage = new StringBuilder();
    for (String string : strings) {
        textToShowInMessage.append(string);
        textToShowInMessage.append("; ");
    }
    FacesMessage msg = new FacesMessage(super.getBundle().getString(
            textToShowInMessage.toString()), "");

    FacesContext.getCurrentInstance().addMessage(null, msg);
}

getters... setters...

以下是一个观点:

....
<h:form>
<ui:repeat var="string" value="#{testBean.strings}">
    <h:inputText value="#{string}" />
    <br />
</ui:repeat>
<p:commandButton value="#{msg.save}"
actionListener="#{testBean.saveAction}" icon="ui-icon-disk"
        update="@form" />
</h:form>
...

在后台bean字符串列表中处理表单时,始终为空。

如何在没有任何值的情况下处理表单输入的内部迭代?

上的action或actionListener也会出现同样的问题

共有2个答案

郭德惠
2023-03-14

我的变通解决方案直接从页面获取值:

<ui:repeat id="repeat" value="#{bean.strings}" var="s" varStatus="status">
    <h:inputText id="x" value="#{s.field}"/>
    <h:commandLink style="margin: .5em 0" styleClass="commandLink" actionListener="#{bean.save(status.index)}" value="#{bundle.Send}"/>
</ui:repeat>

保存方法:

public void save(String rowid) {
        String jsParam = Util.getJsParam("repeat:" + rowid + ":x");
        System.out.println("jsParam: " + jsParam); //persist...
    }

getJsParam方法:

public static String getJsParam(String paramName) {
    javax.faces.context.FacesContext jsf = javax.faces.context.FacesContext.getCurrentInstance();
    Map<String, String> requestParameterMap = jsf.getExternalContext().getRequestParameterMap();
    String paramValue = requestParameterMap.get(paramName);
    if (paramValue != null) {
        paramValue = paramValue.trim();
        if (paramValue.length() == 0) {
            paramValue = null;
        }
    }
    return paramValue;
}
红富
2023-03-14

您的问题与PrimeFaces

首先,让我们离开你的例子。基本上,你有

<ui:repeat value="#{bean.strings}" var="s">
    <h:inputText value="#{s}"/>
</ui:repeat>

使用支持列表

罪魁祸首在这里:value=“#{s}”。通过

解决方法#1:包装类/模型对象

这种情况可以通过为类使用包装器对象来克服。对于字符串,它可以是“简单可变字符串”,如下所示:

public class MString {
    private String string;//getter+setter+constructor
}

在这种情况下,迭代将按预期进行:

<ui:repeat value="#{bean.mstrings}" var="ms">
    <h:inputText value="#{ms.string}"/>
</ui:repeat>

使用支持列表

请注意,如果您有您的模型类,如User,并且将在中更改其属性

变通方法#2:链接属性访问

另一种解决方法是直接从中访问集合的元素。

在这种情况下,迭代也将按预期工作:

<ui:repeat value="#{bean.strings}" var="s" varStatus="status">
    <h:inputText value="#{bean.strings[status.index]}"/>
</ui:repeat>

使用普通支持列表

 类似资料:
  • 我想处理这个表单(value eChangueListener在真实情况下无效)。 这是后台bean: 元素模型: 最后,有人认为: 我还想处理TreeNode中的所有表单值。但在支持bean中只接收第一个childresn的第一个值。 这是输入: 这是输出: 我不知道如何处理所有的树值。。。

  • h:inputText标记呈现“text”类型的HTML输入元素。 JSF标签 (JSF Tag) <h:inputText value = "Hello World!" /> 渲染输出 (Rendered Output) <input type = "text" name = "j_idt6:j_idt8" value = "Hello World!" /> 标签属性 (Tag Attri

  • 我的JSF页面是这样的,

  • 我正在使用渲染一个表,其中有一个单选按钮。i、 例如,在选择radioButton时,需要重新呈现整个表单。但这是行不通的。 这是我的密码:

  • 我们为我们的项目创建了一个JSF表组件,它使用

  • 问题内容: 假设我为使用版本10内核的OS制作了一个映像,如果我在运行版本9内核的主机OS上为该映像运行一个容器,那么Doc​​ker会表现出什么行为?那版本11呢? 版本的向后兼容性重要吗?我出于好奇而问,因为文档仅讨论“最低Linux内核版本”等。这听起来像主机运行的内核版本超出该最低值无关紧要。这是真的?有警告吗? 问题答案: 假设我为使用版本10内核的操作系统制作映像。 我认为这是一个误解