我想处理此表单(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也会出现同样的问题
我的变通解决方案直接从页面获取值:
<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;
}
您的问题与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上为该映像运行一个容器,那么Docker会表现出什么行为?那版本11呢? 版本的向后兼容性重要吗?我出于好奇而问,因为文档仅讨论“最低Linux内核版本”等。这听起来像主机运行的内核版本超出该最低值无关紧要。这是真的?有警告吗? 问题答案: 假设我为使用版本10内核的操作系统制作映像。 我认为这是一个误解