分析GXT FileUploadField的逻辑

时间:2013-05-20 19:39:33

标签: java gwt file-upload gxt

仅限GXT 3.x。

有人可以分析并解释FileUploadField中三个私有字段之间的连接吗?

具体地,

  1. 触发fileinput显示的按钮的onclick动作在哪里?如果没有,那么如何。
  2. fileinput.getValue()如何转移到文本输入窗口小部件?
  3. 如果你能回答上述问题,你应该能够回答这个问题......(但如果你不提供上述两个问题的答案,请不要回答这个问题)。以下陈述是真的,有些真实或偶然吗?

    • GXT故意无法以编程方式触发按钮onclick,因为Security Concerns不允许以编程方式触发文件输入元素。
    • 如果这是真的,(为什么?)无论如何,我仍然可以通过编程方式访问按钮和fileinput元素。没有阻止我或任何人。

    修改
    好的,不要紧,第2项:将fileinput值传送到onChange方法的文本输入。

1 个答案:

答案 0 :(得分:2)

  1. 没有。有一个<input type=file>无形地涂在“真实”按钮的顶部。单击此按钮时,会出现一个对话框 - 单击“点击”<input type=file>而不是按钮,但onBrowserEvent告诉按钮的行为方式就像点击它一样。据我所知,这是获取浏览器提供的文件系统(即“选择文件”)的唯一途径(至少支持没有新文件api,flash或其他插件的浏览器) )。

  2. <input type=file>公开对页面上的javascript访问名称(可能是也可能不完整甚至是真实的)。正如您所注意到的,这可以从输入本身的DOM更改事件中获得。只有文件名可用(同样,没有文件api),它可能有一个假路径(即IE)或没有路径(其他人)。

  3. 这不是GXT与此有关的安全问题 - 相反,该字段dom的rube-goldberg布局是为了处理浏览器的安全限制。在private上使用<input>只是明确表示您不应该直接访问它,并且 nothing 有意义以防止您阅读它。如果你将其子类化,请继续使用getFileInput(),否则,使用JSNI和所谓的违反者模式来获取对文件字段或该方法的引用。

  4. 是的 - 这不是关于安全性,而是关于编写可维护代码。另请参阅https://stackoverflow.com/a/2954949/860630