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 做给你。
我有两个 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 做给你。