Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax 加载数据时出现问题_Ajax_Jsf_Primefaces - Fatal编程技术网

Ajax 加载数据时出现问题

Ajax 加载数据时出现问题,ajax,jsf,primefaces,Ajax,Jsf,Primefaces,我在页面中有多个表单,每个表单都有数据表。 选择时,映射到该控件的datatable应显示在页面上。 使用primefaces开发应用程序时遇到以下异常: javax.faces.view.facelets.TagAttributeException: //C:/Workspace/Application/WebContent/transfer.xhtml @28,102 rendered="#{transferMB.mySelectedValues('1')}" Error Parsing

我在页面中有多个表单,每个表单都有数据表。 选择时,映射到该控件的datatable应显示在页面上。 使用primefaces开发应用程序时遇到以下异常:

  javax.faces.view.facelets.TagAttributeException: //C:/Workspace/Application/WebContent/transfer.xhtml @28,102 rendered="#{transferMB.mySelectedValues('1')}" Error Parsing: #{transferMB.mySelectedValues('1')}
            at com.sun.faces.facelets.tag.TagAttributeImpl.getValueExpression(TagAttributeImpl.java:428)
            at com.sun.faces.facelets.tag.TagAttributeImpl.getValueExpression(TagAttributeImpl.java:378)
            at com.sun.faces.facelets.tag.jsf.ComponentRule$ValueExpressionMetadata.applyMetadata(ComponentRule.java:107)
            at com.sun.faces.facelets.tag.MetadataImpl.applyMetadata(MetadataImpl.java:81)
            at javax.faces.view.facelets.MetaTagHandler.setAttributes(MetaTagHandler.java:129)
            at javax.faces.view.facelets.DelegatingMetaTagHandler.setAttributes(DelegatingMetaTagHandler.java:102)
     weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
            at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
            at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277)
            at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183)
            at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454)
            at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
            at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)
        Caused by: javax.el.ELException: Error Parsing: #{transferMB.mySelectedValues('1')}
            at com.sun.el.lang.ExpressionBuilder.createNodeInternal(Unknown Source)
            at com.sun.el.lang.ExpressionBuilder.build(Unknown Source)
            at com.sun.el.lang.Expres

sionBuilder.createValueExpression(Unknown Source)
        at com.sun.el.ExpressionFactoryImpl.createValueExpression(Unknown Source)
        at com.sun.faces.facelets.tag.TagAttributeImpl.getValueExpression(TagAttributeImpl.java:412)
        ... 94 more

您应该使用逗号分隔要更新的表单,如:

<p:ajax update=":transForm, :sprdForm" />   

这意味着有两个表单需要更新。
如果您的代码如下:

<p:ajax update=":transForm :sprdForm" />


表示您要在
转换中更新
sprdForm
,这是不可能的,因为您无法将表单放入另一个表单中。

您正在尝试将列表与单个字符串进行比较:

rendered="#{transferMB.selectedItems == '1'}"
但是,您应该检查列表是否包含以下单个字符串:

在html中:

rendered="#{denemeBean.controlSelectedValues('1')}"
在bean类中:

// list should be initialized (unless, we'll get NullPointer 
// when using the below method)

private List<String> selectedItems = new ArrayList<>();

// This methods returns true if parameter is included in the 
// list of selected items

public boolean controlSelectedValues(String needed) {
    for (String string : selectedItems) {
        if (string.equals(needed)) {
            return true;
        }
    }
    return false;
}
//应该初始化列表(除非我们得到null指针
//使用以下方法时)
private List selectedItems=new ArrayList();
//如果参数包含在
//选定项目列表
公共布尔控制SelectedValues(需要字符串){
for(字符串:selectedItems){
if(string.equals(需要)){
返回true;
}
}
返回false;
}
最后,我不确定是否真的需要将这些数据表放入表单中。 下面您可以看到我所处理的工作副本:(当然,您应该用datatables替换OutputText)

//bean文件
导入java.util.List;
导入javax.faces.bean.ManagedBean;
导入javax.faces.bean.ViewScoped;
@ManagedBean(name=“denemeBean”)
@视域
公共类DenemeBean实现了可序列化{
private List selectedItems=new ArrayList();
/**
*@返回selectedItems
*/
公共列表getSelectedItems(){
返回selectedItems;
}
/**
*@param selectedItems要设置的selectedItems
*/
公共无效设置selectedItems(列出selectedItems){
this.selectedItems=selectedItems;
}
公共布尔控制SelectedValues(需要字符串){
for(字符串:selectedItems){
if(string.equals(需要)){
返回true;
}
}
返回false;
}
}
//html文件:
使用
是完全有效的。 这里还有很多其他问题

第一点:渲染属性将列表与字符串进行比较(
selectedItems=='1'
)。它应该测试列表是否包含字符串(
selectedItems.contains('1')
)。(注意:您必须为此使用EL 2.2)

第二点是:我认为
需要
columns
-属性。 我精简了您的代码,这对我来说很好:

<h:body>
<h:form>
    <p:selectManyCheckbox value="#{transferMB.selectedItems}">
        <f:selectItem itemValue="1" itemLabel="Transfer Status" />
        <f:selectItem itemValue="2" itemLabel="Spread Status" />
        <f:selectItem itemValue="3" itemLabel="Number1 - 3" />
        <p:ajax update=":transForm :sprdForm"/>
    </p:selectManyCheckbox>
</h:form>

<h:form id="transForm">
    <p:panelGrid columns="1" rendered="#{transferMB.selectedItems.contains('1')}">
        transForm
    </p:panelGrid>
</h:form>

<h:form id="sprdForm">
    <p:panelGrid columns="1" rendered="#{transferMB.selectedItems.contains('2')}">
        sprdForm
    </p:panelGrid>
</h:form>
</h:body>

使改变
喷射成形

我使用
是因为
带有内部
导致
java.lang.ClassCastException:java.lang.Boolean无法转换为org.primefaces.component.api.ClientBehaviorRenderingMode
。我认为这可能是我的JSF实现JSF-impl-2.1.7-jbossorg-2.jar中的一个bug。

是否调用selectedItems的setter?您可以尝试使用
在上面的文章中提到的尝试时遇到以下异常:“rendered=“#{searchMB.controlSelectedValues('1')}”错误解析:#{transferMB.controlSelectedValues('1')}”。控制台上的异常:1100:JSF1073:javax.faces.view.facelets.TagAttributeException在处理RENDER_响应6时捕获@ISHKAFELStackTrace中的根异常是什么?根据所提供的信息,我们只能猜测。始终检查NullPointerException(列表已初始化?)。您在评论中也提到了searchMB和transferMB,请检查您的代码:您使用哪一个?方法
controlSelectedValues
基本上与列表中的
contains
相同,为什么不使用它呢?我发现你在哪里问了同样的问题。请看我的建议贴在那里我试过了,正如你提到的,它在页面上抛出了异常。“rendered=“#{searchMB.controlSelectedValues('1')}”错误解析:#{transferMB.controlSelectedValues('1')}”。控制台上的异常:1100:JSF1073:javax.faces.view.facelets.TagAttributeException在处理RENDER_RESPONSE 6@Null Pointer.done时捕获,正如您所建议的,面临异常。请查看上面修改的帖子并包含异常-@Null指针。我猜您不能在调用中传递参数。(与表达语言(EL)有关,但我不知道细节)。因此,您需要将此调用相关的控制方法更改为非参数样式。例如:“rendered=“#{denemeBean.controlTableA}”和“public boolean controlTableA(){controlSelectedValues(“1”);}”这样,每个控件都有一个方法。这些方法使用必要的参数调用我们的主方法。
<h:body>
<h:form>
    <p:selectManyCheckbox value="#{transferMB.selectedItems}">
        <f:selectItem itemValue="1" itemLabel="Transfer Status" />
        <f:selectItem itemValue="2" itemLabel="Spread Status" />
        <f:selectItem itemValue="3" itemLabel="Number1 - 3" />
        <p:ajax update=":transForm :sprdForm"/>
    </p:selectManyCheckbox>
</h:form>

<h:form id="transForm">
    <p:panelGrid columns="1" rendered="#{transferMB.selectedItems.contains('1')}">
        transForm
    </p:panelGrid>
</h:form>

<h:form id="sprdForm">
    <p:panelGrid columns="1" rendered="#{transferMB.selectedItems.contains('2')}">
        sprdForm
    </p:panelGrid>
</h:form>
</h:body>