我不得不说,我不确定这是一个问题,但我想是的。我有两个提交按钮。第一个是我通过序列号获取产品信息,然后我再次提交整个表格。
搜索按钮和代码:
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或其他什么?
谢谢! 萨米
答案 0 :(得分:2)
仅当bean为@ViewScoped
且您从操作方法返回null
或void
时才有效。
如果您返回非null
或void
,如下所示
// Back to same page!
return "newRma";
然后将创建一个全新的视图范围的bean实例,从而废弃最初的实例。
此外,我不确定你为什么在第二个按钮上使用了immediate="true"
,这没有任何意义,但你是否意识到非immediate
输入的数据不会这样完全处理,因此你应该使用前一个非immediate
提交的数据吗?
顺便说一句,收集提交数据的方式也没有意义。您不需要遍历请求参数映射(顺便使用了无效的参数名称)。只需直接访问绑定到输入值的bean属性。