JSF:java.lang.IllegalArgumentException:can';t解析参数数
有人能帮我解决这个问题吗?我是JSF新手。我已经用Primefaces构建了一个SpringWebMVC应用程序。这个应用程序包含一个可以拖入电子表格的节点列表(我正在使用SpreadJS)。每个节点后面都有一个模型和一个bean。每个节点都有一个名称和一个输入类型。我需要在节点值和它在电子表格中的值之间进行同步,反之亦然。因此,在每个changeEvent中,我调用一个remoteCommand,并将五个参数传递给我的managedBean。问题是,每当我加载页面时,我都会出现以下错误:以下是我的代码:JSF:java.lang.IllegalArgumentException:can';t解析参数数,jsf,primefaces,Jsf,Primefaces,有人能帮我解决这个问题吗?我是JSF新手。我已经用Primefaces构建了一个SpringWebMVC应用程序。这个应用程序包含一个可以拖入电子表格的节点列表(我正在使用SpreadJS)。每个节点后面都有一个模型和一个bean。每个节点都有一个名称和一个输入类型。我需要在节点值和它在电子表格中的值之间进行同步,反之亦然。因此,在每个changeEvent中,我调用一个remoteCommand,并将五个参数传递给我的managedBean。问题是,每当我加载页面时,我都会出现以下错误:以下是
@ManagedBean
@SessionScoped
public class HelloBean implements Serializable {
private static final long serialVersionUID = 1L;
@ManagedProperty("#{param.nodeId}")
private String nodeId;
@ManagedProperty("#{param.paramId}")
private String paramId;
@ManagedProperty("#{param.row}")
private int row;
@ManagedProperty("#{param.cel}")
private int cel;
@ManagedProperty("#{param.value}")
private String value;
public String getNodeId() {
return nodeId;
}
public void setNodeId(String nodeId) {
this.nodeId = nodeId;
}
public String getParamId() {
return paramId;
}
public void setParamId(String paramId) {
this.paramId = paramId;
}
public int getRow() {
return row;
}
public void setRow(int row) {
this.row = row;
}
public int getCel() {
return cel;
}
public void setCel(int cel) {
this.cel = cel;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public void execCmd() {
Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
String nodeId = params.get("nodeId");
}
@ManagedBean
@会议范围
公共类HelloBean实现了可序列化{
私有静态最终长serialVersionUID=1L;
@ManagedProperty(“{param.nodeId}”)
私有字符串nodeId;
@ManagedProperty(“#{param.paramId}”)
私有字符串paramId;
@ManagedProperty(“#{param.row}”)
私人int row;
@ManagedProperty(“{param.cel}”)
私人国际中心;
@ManagedProperty(“#{param.value}”)
私有字符串值;
公共字符串getNodeId(){
返回节点ID;
}
公共void setNodeId(字符串nodeId){
this.nodeId=nodeId;
}
公共字符串getParamId(){
返回参数id;
}
公共void setParamId(字符串paramId){
this.paramId=paramId;
}
public int getRow(){
返回行;
}
公共无效集合行(整数行){
this.row=行;
}
public int getCel(){
返回cel;
}
公共无效集合(内部集合){
this.cel=cel;
}
公共字符串getValue(){
返回值;
}
公共void设置值(字符串值){
这个值=值;
}
public void execCmd(){
Map params=FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
字符串nodeId=params.get(“nodeId”);
}
我的xhtml文件如下所示:
<h:body>
<div class="container">
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-6">
<h:form id="myForm">
<div class="form-row">
<div class="form-group col-md-6">
<label for="inputEmail4">Test Submit Value</label>
<h:inputText name="text1" id="text1" value="#{helloBean.value}" >
</h:inputText>
</div>
</div>
<p:remoteCommand name="callRemoteMethod" actionListener="#{helloBean.execCmd()}" />
</h:form>
</div>
<div class="col-lg-6 col-md-6 col-sm-6">
<div name="right_frame" id="ss" style="height: 600px; width: 100%;"></div>
</div>
</div>
</div>
<h:form>
<br />
</h:form>
</h:body>
<script type="text/javascript">
var nodeId = null;
var paramId = null;
var row = null;
var cell= null;
var value = null;
var spread;
window.onload = function() {
spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
var sheet = spread.getActiveSheet();
sheet.setValue(0, 1, 123, GC.Spread.Sheets.SheetArea.viewport);
sheet.bind(GC.Spread.Sheets.Events.CellChanged , function (e, args) {
if (args.propertyName === "value") {
if(sheet.getTag(0,1) != null){
var obj = JSON.parse(sheet.getTag(0,1));
nodeId = obj.nodeId;
paramId = obj.paramId;
row = args.row;
cell = args.col;
callRemoteMethod({name: 'nodeId', value: ""}, {name: 'paramId', value: ""}, {name: 'row', value: 1}, {name: 'cel', value: 1}, {name: 'value', value: "Test"}]);
}
}
});
};
</script>
</html>
测试提交值
var nodeId=null;
var paramId=null;
var行=null;
var-cell=null;
var值=null;
var价差;
window.onload=函数(){
spread=新的GC.spread.Sheets.工作簿(document.getElementById(“ss”);
var sheet=spread.getActiveSheet();
setValue(0,1,123,GC.Spread.Sheets.SheetArea.viewport);
sheet.bind(GC.Spread.Sheets.Events.CellChanged,函数(e,args){
如果(args.propertyName==“value”){
if(sheet.getTag(0,1)!=null){
var obj=JSON.parse(sheet.getTag(0,1));
nodeId=obj.nodeId;
paramId=obj.paramId;
行=args.row;
单元格=args.col;
callRemoteMethod({name:'nodeId',value:},{name:'paramId',value:},{name:'row',value:1},{name:'cel',value:1},{name:'value',value:'Test}]);
}
}
});
};
这是堆栈跟踪:
Caused by: java.lang.IllegalArgumentException: can't parse argument number: param.nodeId
at java.text.MessageFormat.makeFormat(MessageFormat.java:1420)
at java.text.MessageFormat.applyPattern(MessageFormat.java:479)
at java.text.MessageFormat.<init>(MessageFormat.java:363)
at java.text.MessageFormat.format(MessageFormat.java:835)
at com.sun.faces.util.MessageUtils.getExceptionMessageString(MessageUtils.java:396)
at com.sun.faces.mgbean.BeanBuilder$Expression.validateLifespan(BeanBuilder.java:604)
at com.sun.faces.mgbean.BeanBuilder$Expression.<init>(BeanBuilder.java:553)
at com.sun.faces.mgbean.ManagedBeanBuilder.bakeBeanProperty(ManagedBeanBuilder.java:363)
at com.sun.faces.mgbean.ManagedBeanBuilder.bake(ManagedBeanBuilder.java:107)
... 49 more
Caused by: java.lang.NumberFormatException: For input string: "param.nodeId"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at java.text.MessageFormat.makeFormat(MessageFormat.java:1418)
... 57 more
原因:java.lang.IllegalArgumentException:无法分析参数编号:param.nodeId
位于java.text.MessageFormat.makeFormat(MessageFormat.java:1420)
位于java.text.MessageFormat.applyPattern(MessageFormat.java:479)
在java.text.MessageFormat.(MessageFormat.java:363)
在java.text.MessageFormat.format(MessageFormat.java:835)
在com.sun.faces.util.MessageUtils.getExceptionMessageString(MessageUtils.java:396)上
在com.sun.faces.mgbean.BeanBuilder$Expression.validateLifespan(BeanBuilder.java:604)上
在com.sun.faces.mgbean.BeanBuilder$Expression上。(BeanBuilder.java:553)
位于com.sun.faces.mgbean.ManagedBeanBuilder.bakeBeanProperty(ManagedBeanBuilder.java:363)
位于com.sun.faces.mgbean.ManagedBeanBuilder.bake(ManagedBeanBuilder.java:107)
…还有49个
原因:java.lang.NumberFormatException:对于输入字符串:“param.nodeId”
位于java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
位于java.lang.Integer.parseInt(Integer.java:492)
在java.lang.Integer.parseInt(Integer.java:527)处
位于java.text.MessageFormat.makeFormat(MessageFormat.java:1418)
…还有57个
任何帮助???您正在将
整数的值设置为字符串变量,如异常所示
java.lang.NumberFormatException:用于输入字符串:“param.nodeId”
nodeId
变量应为Integer
变量
或
您可以使用toString()
方法来解析Integer
值而不是@ManagedProperty(“#{param.nodeId}”),我创建了@ManagedProperty(“#{nodeId}”),它可以工作:
@ManagedProperty("#{nodeId}")
private String nodeId;
@ManagedProperty("#{paramId}")
private String paramId;
@ManagedProperty("#{row}")
private int row;
@ManagedProperty("#{cel}")
private int cel;
@ManagedProperty("#{value}")
private String value;
不,我正在设置一个空字符串{name:'nodeId',value:},即使我在bean中将其更改为int,也会解决这个问题persist@S.Fahmi-你能试试这个“sheet.setValue(0,1,123”,GC.Spread.SheetArea.viewport)”吗这是在电子表格中插入一个值,它与问题无关,我尝试了它,但即使我删除了它也不起作用completely@Mohamed-我更改了管理属性,如下所示,它可以工作:@ManagedProperty(“{nodeId}”)private int nodeId;@ManagedProperty(“{paramId}”)private String paramId;@ManagedProperty(“{row}”)private int row;@ManagedProperty(“#{cel}”)private int cel;@ManagedProperty(“#{valu”)