使用JSF 2.2的多个表单

时间:2014-05-21 00:12:15

标签: jsf-2 myfaces

我有一个包含两种表格的JSF页面

我将JSF 2.2与MyFaces实现一起使用

显示下一个示例(xhtml和ManagedBean)

当我按下添加项目(doNew)按钮时,输入显示正确的值;按下后退(doCancel)按钮后,再次按添加项目(doNew)。

当我按下第一个时,输入exampleBean.newBean.descripcion的值显示旧描述。但输出#{exampleBean.newBean.descripcion}"始终显示正确的值。如果我只使用一种形式这个问题很有效,那么我需要理解为什么不能使用两种形式?

此致

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">

<h:body>

<h:form styleClass="horizontal-form form-search" id="form1">
    <h:messages></h:messages>

    <h:commandButton styleClass="btn btn-default btn-success"
        value="Add Item" action="#{exampleBean.doNew}">

    </h:commandButton>

</h:form>


<h:form id="form2">
    <h:messages></h:messages>

    <h:outputText value="#{exampleBean.newBean.descripcion}"></h:outputText>
    <h:inputText value="#{exampleBean.newBean.descripcion}" id="input1234"></h:inputText>

    <h:commandButton styleClass="btn btn-default btn-default"
        value="Back" action="#{exampleBean.doCancel}"
        immediate="true">
    </h:commandButton>
</h:form>

我的ManagedBean是

@ManagedBean(name = "exampleBean")
@ViewScoped
public class ExampleManagedBean {
    private Object newBean;
protected String panelMode = null;

public ExampleManagedBean() {
    // TODO Auto-generated constructor stub
    panelMode = "default";

    newBean = new Concepto();
}

public String doCancel() {
    panelMode = "default";
    return null;
}

public String doNew() {
    panelMode = "edit";
    Concepto c1 = new Concepto();
    c1.setDescripcion("descripcion " + System.currentTimeMillis());
    newBean = c1;
    return null;
}

public Object getNewBean() {
    return newBean;
}

public void setNewBean(Object newBean) {
    this.newBean = newBean;
}

public String getPanelMode() {
    return panelMode;
}

public void setPanelMode(String panelMode) {
    this.panelMode = panelMode;
}

}

1 个答案:

答案 0 :(得分:0)

commandButton提交其表单的值。而且它没有看到其他形式的价值。

因此,在您的情况下,您必须将commandButton与要添加的值的形式相同。


表单标记呈现HTML表单元素。 JSF表单使用&#34; post-back&#34;技术将表单数据提交回包含表单的页面

http://www.jsftoolbox.com/documentation/help/12-TagReference/html/h_form.html