如何提交两次相同的表格?

时间:2012-11-08 13:16:31

标签: forms jsf primefaces submit

我不得不说,我不确定这是一个问题,但我想是的。我有两个提交按钮。第一个是我通过序列号获取产品信息,然后我再次提交整个表格。

搜索按钮和代码:

BUTTON 1

<p:column><h:outputLabel value="#{bundle.newRma_label_sarjanumero}" for="sarjanro" /></p:column>
                <p:column><p:inputText id="sarjanro" value="#{MainController.selected.sarjanro}" style="width: 200px;" /></p:column>
                <p:column><p:commandButton icon="ui-icon-search"
                                           action="#{MainController.haeTiedotSarjanrolla}" style="width: 100px;" update=":messagePanel"/></p:column>

 //Fetching product info with serial number
public String haeTiedotSarjanrolla() {
    log.info("sarjanro=" + current.getSarjanro());
    Sarjanumerot s = null;

    s = helper.getSerialInfo(current.getSarjanro());
    if (s != null) {
        current.setAn8(s.getAn8());
        current.setDsc1(s.getDsc1());
        current.setDsc2(s.getDsc2());
        current.setSarjanro(s.getId().getLotn());
        current.setTuotenro(s.getId().getLitm());
    }

    // Back to same page!
    return "newRma";
}

另一个按钮(保存)

<p:column><p:commandButton action="#{MainController.talletaUusiRma}" value="#{bundle.newRma_tallenna}" immediate="true" style="width: 220px;"/></p:column>

保存(按钮2)正常,BUT请求为空,没有任何数据。我尝试检查它,它总是NULL:

首次提交后未填充的另一个字段:

<p:row>
            <p:column></p:column>
            <p:column><p:outputLabel value="#{bundle.newRma_shortdesc}" for="shortdesc"/></p:column>
            <p:column><p:inputTextarea rows="4" cols="30" id="shortdesc" value="#{MainController.selected.shortdesc}" style="width: 200px;"/></p:column>

        </p:row>

Map<String, String> parameterMap = (Map<String, String>) FacesContext.getCurrentInstance()
                     .getExternalContext().getRequestParameterMap();
    String temp = parameterMap.get("shortdesc");

temp永远是NULL !!

有没有最好的做法来处理这个与primefaces,ajax,js或其他什么?

谢谢! 萨米

1 个答案:

答案 0 :(得分:2)

仅当bean为@ViewScoped且您从操作方法返回nullvoid时才有效。

如果您返回非nullvoid,如下所示

// Back to same page!
return "newRma";

然后将创建一个全新的视图范围的bean实例,从而废弃最初的实例。

此外,我不确定你为什么在第二个按钮上使用了immediate="true",这没有任何意义,但你是否意识到非immediate输入的数据不会这样完全处理,因此你应该使用前一个非immediate提交的数据吗?

顺便说一句,收集提交数据的方式也没有意义。您不需要遍历请求参数映射(顺便使用了无效的参数名称)。只需直接访问绑定到输入值的bean属性。