Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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 2 以编程方式从HtmloutMetargetLink获取值_Jsf 2_Primefaces - Fatal编程技术网

Jsf 2 以编程方式从HtmloutMetargetLink获取值

Jsf 2 以编程方式从HtmloutMetargetLink获取值,jsf-2,primefaces,Jsf 2,Primefaces,我们有一个PrimeFaces数据表,希望导出到Excel。列的定义如下: <p:column headerText="#{msg['common.number.label']}" width="60"> <h:link id="insiderlist-id-action-link" value="#{value.id}" outcome="/view/insiderlistmgmt/insiderLi

我们有一个PrimeFaces数据表,希望导出到Excel。列的定义如下:

<p:column headerText="#{msg['common.number.label']}"
          width="60">
    <h:link id="insiderlist-id-action-link"
            value="#{value.id}"
            outcome="/view/insiderlistmgmt/insiderListManager"
            target="_blank">
        <f:param name="id" value="#{insiderListManager.getEncryptedValue(value.id.toString())}" />
    </h:link>
</p:column>

<p:column headerText="#{msg['common.name.label']}"
          width="120">
    <h:link id="insiderlist-name-action-link"
            value="#{value.name}"
            outcome="/view/insiderlistmgmt/insiderListManager"
            target="_blank">
        <f:param name="id" value="#{insiderListManager.getEncryptedValue(value.id.toString())}" />
    </h:link>
</p:column>
你看到的System.out总是打印:

问题:


如何以编程方式查找如上所述的显示/计算的值?

自定义导出器是不必要的,因为HtmlOutput实现了ValueHolder,默认导出器已经支持它,只需调用getValue就足够了。如果仍然获取空字符串,则与显示期间相比,数据模型更有可能在导出期间发生更改。由于Excel输出不同,因此需要自定义导出器。客户希望展平子表,而不是将它们嵌套到另一个导出器中。导出器是伪代码,MyExporter实际上是PrimeFaces Extensions子类。OK。您是否检查了数据模型的完整性?那将是我的第一个嫌疑犯。到目前为止,代码看起来还不错,虽然有点笨拙,但getValue已经足够了。是的,哈哈,代码很笨拙。在几件事情没有成功之后,这纯粹是绝望。然后我必须检查数据模型。谢谢你的提示。我想知道为什么有人会在导出过程中更改数据模型。这实际上是一个新的请求。所以,bean可能是请求范围的,和/或它在getter方法或延迟加载程序中执行依赖于请求参数的业务逻辑。
public MyExporter extends AnotherExporter
{
    @Override
    protected String exportValue( FacesContext context, UIComponent component )
    {
        if ( component instanceof HtmlOutcomeTargetLink )
        {
            ELContext elContext = context.getELContext();

            HtmlOutcomeTargetLink link = ( HtmlOutcomeTargetLink ) component;            
            ValueExpression valueExpression = link.getValueExpression( "value" );

            Object expressionValue = valueExpression.getValue( elContext );
            Object linkValue = link.getValue();

            System.out.println( "<h:link value=" + expressionValue + "/" + linkValue + ">" );

            ... // return correct value etc.
        }

        return super.exportValue( context, component );
    }
12:13:07,344 INFO    [] (160) <h:link value=null/null>
12:13:07,344 INFO    [] (160) <h:link value=null/null>
12:13:07,356 INFO    [] (160) <h:link value=null/null>
12:13:07,357 INFO    [] (160) <h:link value=null/null>
12:13:07,357 INFO    [] (160) <h:link value=null/null>
12:13:07,371 INFO    [] (160) <h:link value=null/null>