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
Jsf <;h:commandLink>;不在a内工作<;h:数据表>;_Jsf_Ajax4jsf - Fatal编程技术网

Jsf <;h:commandLink>;不在a内工作<;h:数据表>;

Jsf <;h:commandLink>;不在a内工作<;h:数据表>;,jsf,ajax4jsf,Jsf,Ajax4jsf,我会尽力解释自己: 我正在使用java、JSF2.0和RichFaces4.2.1开发一个JSF项目 当我访问jsf时,它只加载一个搜索过滤器和一个commandLink。commandLink将在我的backingBean中启动一个方法,以加载将在dataTable中显示的数据 <h:commandLink id="btnRecords"> <f:ajax render="myCompAjax" event="click" listener="#{myBean.loa

我会尽力解释自己:

我正在使用java、JSF2.0和RichFaces4.2.1开发一个JSF项目

当我访问jsf时,它只加载一个搜索过滤器和一个commandLink。commandLink将在我的backingBean中启动一个方法,以加载将在dataTable中显示的数据

<h:commandLink id="btnRecords">
    <f:ajax render="myCompAjax" event="click" listener="#{myBean.loadRecords}" />
    <h:graphicImage value="img/ico_new.gif" alt="#{bundle['button.search']}" />
</h:commandLink>

datatable一开始是不可见的,但是一旦单击commandLink,backingBean中的一个标志就会改变,并且该表显示了我刚刚加载的数据

<a4j:outputPanel ajaxRendered="true" id="myCompAjax">
    <h:dataTable id="recordsTable" value="#{myBean.records}"                   
     var="item" rendered="#{myBean.flagShowTable}">
        <h:column headerClass="thPijama" >
            <f:facet name="header">
                <table><tr class="thPijama"><td></td></tr></table>
            </f:facet>
            <h:commandLink action="#{myBean.goNextPage}">
                <h:outputText value="Go Next Page" />
                <h:inputHidden value="#{item}" />   
            </h:commandLink>                                                     
        </h:column>                   
    </h:dataTable>
</a4j:outputPanel>

问题是dataTable中的commandLink操作根本不起作用。我只想导航到另一个jsf。事实上,它所做的是隐藏数据表并保持过滤器不变。操作方法仍然无法访问

当然,如果我在数据表之外设置相同的commandLink,它就会工作

<h:commandLink id="btnRecords">
    <f:ajax render="myCompAjax" event="click" listener="#{myBean.loadRecords}" />
    <h:graphicImage value="img/ico_new.gif" alt="#{bundle['button.search']}" />
</h:commandLink>
我不能使用会话范围bean,因为我工作的人不批准它

有人能帮我吗

谢谢你的提示

我不能使用会话范围bean,因为我工作的人不批准它

您是否暗示将bean放在会话范围而不是请求范围实际上解决了问题?如果是这样,那么只需将bean放入视图范围

@ManagedBean
@ViewScoped
public class MyBean implements Serializable {
    // ...
}
这样,只要您通过ajax请求与同一视图交互,bean就会一直存在。在同一会话中,bean没有在其他浏览器选项卡/窗口中共享(这确实是架构师禁止在简单视图中使用它的主要原因)

另见:
  • -第4点适用于您

您能在这里发布更多的标记吗?处理此页面的
在哪里?你有嵌套的表单吗?@kolossus:问题末尾的陈述“当然,如果我在数据表外设置相同的commandLink,它就可以工作。”这足以暗示有表单,但它不是嵌套的。嗨,BalusC,谢谢你的快速回复。当我访问jsf时,将MyBean设置为Serializable和ViewScope会变成java.io.NotSerializableException。如果有帮助,我将部署在Jetty服务器中,MyBean包含一个实现Serializable的ObjectVO、两个List和一个FacadeInterface。