Apex DateTime 到 String 然后传递参数

Apex DateTime to String then pass the argument

我有两个 Visualforce 页面,出于多种原因,我决定最好在它们之间以字符串形式传递日期时间值。但是,在我实施之后,即使我的代码似乎可以编译,我的日期也总是显示为空。

我研究了很多格式化主题,但不幸的是,日期时间格式 () 的每个变体似乎都不会产生不同的结果。

第 1 页上的控制器声明了两个 public 变量

public datetime qcdate;
public String fdt;

qcdate 是从 SOQL 查询生成的。

 wo = [SELECT id, WorkOrderNumber, Quality_Control_Timestamp__c FROM WorkOrder WHERE id=:woid];
 qcdate = wo.Quality_Control_Timestamp__c;

fdt 然后从一个方法生成

fdt = getMyFormattedDate(qcdate);

看起来像这样

public String getMyFormattedDate(datetime dt){
    return dt.format();    }

fdt 然后在 URL 中传递到我的下一个 VF 页面。

String url = '/apex/workordermaintenanceinvoice?tenlan='+tenlan +'&woid=' + woid + '&invnum=' + invnum + '&addr1=' + addr1 + 'fdt=' + fdt;
PageReference pr = new PageReference(url);

我希望在下一页调用 {!fdt} 时获得正确的字符串。但是我没有。

更新:

抱歉,我想我不应该假设传递的变量被正确调用是理所当然的。传递变量后会发生以下情况:

新页面控制器创建变量:

public String fdt

变量是用 getparameters() 捕获的。

fdt = apexpages.currentPage().getparameters().get('fdt');

getfdt() 方法已创建

public String getfdt(){
    return fdt;
}

然后在VF页面调用

{!fdt}

这当然仍然会产生一个 'blank' 日期,这是我仍在努力解决的谜团。

你通过 URL 传递了它,太棒了。但是……那又怎样?页面参数不会神奇地解析为目标页面上的 class 变量。就像你有一个特定于记录的页面并且你知道 url 中有 /apex/SomePage?id=001.... - 这并不意味着你的 VF 页面将在 {!id} 中有任何内容或者你的顶点控制器(如果有的话)会有 id class 变量。您在 apex 中获得的唯一 "magic" 东西是标准控制器,希望它在 sc.getId() 中有一些东西,但仅此而已。

事实上,这是非常愚蠢和危险的。想象一下像 Integer integer = 5 这样的代码,调试起来会很有趣,在下一行中键入 "integer",那会是什么,类型还是变量?有一个名为 "id" 的变量也是个坏主意。

如果您想在纯 Visualforce 中访问目标页面中的 fdt URL 参数,可以在上面使用 {!$CurrentPage.parameters.fdt} should work OK. If you need it in Apex - you'll have to parse it out of the URL. Similar thing, ApexPages.currentPage() and then call getParameters() 之类的东西。

(同样,以这种方式设置参数也更清晰,而不是手动手工制作 URL 和“&”符号。如果你手动操作,理论上你应该转义特殊字符......让 apex 做给你。