- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我希望能够在一个地方定义表单域的所有内容,而不是在数据库中有一些信息,有些是HTML,有些是JavaScript,有些是ASP…
当我想改变一个领域的某些东西时,为什么我要担心可能在四个不同的地方(或更多)改变事情?
也就是说,我不想:
在数据库中声明字段
把这些信息复制到HTML中的某个地方
在某个地方用javascript复制更多信息
在某个asp中复制更多信息
因为我是一个开发人员,所以我理想的是寻找一种方法论,而不是工具或软件包。(我想!)
目前,我是通过将所有控制信息放入sql的扩展属性“description”文本区域来完成这项工作的。例如,所需的电话号码字段将具有以下SQL声明:[home_phone] [varchar](15) NOT NULL
我在description扩展属性中添加了以下“控件”:["Home Phone"][phone_text][user_edit][required][allow_na][form_field_size_equals_size][default=""][group="home_address"][rollover="enter only: numbers, dash, parenthesis, space"][explanation="enter <strong>n/a</strong> if you don't have a home phone"]
在我当前的系统中,以下HTML是为Home Phone字段动态生成的:
<div class="div-item" id="item-FORM:FIELD:TABLE_HOME:HOME_PHONE">
<div class="div-item-description" id="item_description-FORM:FIELD:TABLE_HOME:HOME_PHONE">
<span class="rollover-explanation" title="enter only: numbers, dash, parenthesis, space">
<label for="FORM:FIELD:TABLE_HOME:HOME_PHONE" id="item_label-FORM:FIELD:TABLE_HOME:HOME_PHONE">
Home Phone
</label>
</span>
</div>
<div class="div-item-stipulation" id="item_stipulation-FORM:FIELD:TABLE_HOME:HOME_PHONE">
<span class="stipulation-required" id="item_stipulation_span-FORM:FIELD:TABLE_HOME:HOME_PHONE" title="required" >
*
</span>
</div>
<div class="div-item-value" id="item_value-FORM:FIELD:TABLE_HOME:HOME_PHONE">
<div class="individual-forms">
<form class="individual-forms" id="FORM:TABLE_HOME:HOME_PHONE" name="FORM:TABLE_HOME:HOME_PHONE" action="" method="post" enctype="multipart/form-data" onsubmit="return(false);">
<div class="individual-forms-element">
<input
class=""
type="text"
id="FORM:FIELD:TABLE_HOME:HOME_PHONE" name="FORM:FIELD:TABLE_HOME:HOME_PHONE"
size="15" maxlength="15"
value=""
FORM_control="true"
FORM_control_name="Home Phone"
FORM_control_is_required="true"
FORM_control_is_phone_text="true"
>
</div>
</form>
</div>
</div>
<span class="spanExplanation">
enter <strong>n/a</strong> if you don't have a home phone
</span>
</div>
**FORM_control**...
参数控制,参数出错时会生成解释和字段突出显示。(不幸的是,HTML元素中的自定义参数并不完全符合标准。)
最佳答案
javascript验证被高估了
我认为javascript验证被高估了。在服务器往返可能需要10秒,但现在通常不到3秒的时候,这是很好的。在ajax提交过程中,您可以将时间缩短到次秒。
作为对往返的所有努力的回报,您必须处理跨浏览器支持、复杂调试、缺少服务器端日志记录以及处理用户禁用JS的所有各种复杂性。在一个典型的场景中,我们谈论的是大量的浪费时间和困难的调试(试着问一个典型的白痴他们使用什么浏览器,更不用说他们使用的是什么版本)。
数据库作为一站式验证程序
你说数据库不是一个完整的验证环境,但我认为这不再是真的。像postgresql这样的现代数据库将允许您将复杂的验证函数作为触发器连接到您选择的语言中,并向应用程序返回适当的错误响应。
所以,如果你按照我的思路来做,就可以在一个地方验证数据库,而不存在历史缺陷。过程是:
创建一个基本的html表单,忘记
HTML5或JavaScript验证。
当表格填写完毕,或
必需,通过ajax提交(如果
或标准职位。
或多或少地传递更新/插入
直接去数据库
触发函数正常化和
验证数据。
立即返回结果和/或
错误(可能是通过交易)
执行任何进一步的服务器
正在处理。如果你
决定不保留数据
可以删除新行或
回滚事务。
在结束时返回任何适当的
重定向、消息或更新到
通过json/ajax或
使用已清理的数据重新加载。
这听起来可能很慢/效率低下,但我认为这忽略了当今的现实,即:
现在几乎所有的东西都是宽带,甚至是无线的。
处理能力比
开发人员时间。
这种
更新往往受到
速度用户可以填写表格,你不会
在一个典型的
脚本。
你还得在某个地方做验证,为什么数据库不做呢?
好处是巨大的:
在大容量服务器(如Exchange、Twitter、Feed等)上
进程可以自己进行api控制
通过soap/ajax/rss/whatever since
只需要一层薄薄的
在api客户端之间传输数据
还有数据库。
不管什么客户
使用语言或协议
验证保持不变。
即使是原始的sql语句也会得到
已验证,可防止
编程错误,已损坏
从中导入或第三方源
破坏你的数据结构。
如果
必修的。在普通代码中通常会更难。
验证总是一致的。
验证函数位于
数据库,允许访问
索引和其他行或表
连接器开销,数据转换
以及网络/套接字延迟。
验证函数可以在中运行
编译的代码,即使您的web
服务器语言是动态的。
唯一真正的缺点是:
难以升级或迁移到
其他数据库软件。
如果你喜欢的语言
不支持(但是postgres
支持用C编写的函数,
pl/pgsql、python、tcl、perl、java、
r、ruby、scheme、bash和php so
除非你被困在C/VB上
应该找到一个你能处理的)。
上下文敏感度
你的问题有些方面我完全不推荐。主要是将html表单对象的表示与单个位置的数据绑定在一起。
这个想法很快就会适得其反,因为你会发现在一个典型的应用程序中,信息的呈现对上下文高度敏感——特别是目标受众。
例如,在订购系统上,您可能有一个客户机输入的数据,然后管理员可以访问这些数据。数据的客户端视图可能更有限,它可能需要不同的标题和描述,最好在管理员获得更紧凑的视图时显示为复选框。您甚至可以向不同类型的客户(零售和批发)提供相同的数据。
简言之,数据的呈现通常需要比其验证更为流畅,因此在某一点上,您应该真正画出界线—即使这意味着一些重复。
关于sql - 如何从一个地方控制HTML表单字段的定义,表示,验证和存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3294457/
我正在运行一个辅助角色,并检查 Azure 上托管的存储中是否存在数据。当我将连接字符串用于经典类型的存储时,我的代码可以正常工作,但是当我连接到 V2 Azure 存储时,它会抛出此异常。 “远程服
在我的应用程序的主页上,我正在进行 AJAX 调用以获取应用程序各个部分所需的大量数据。该调用如下所示: var url = "/Taxonomy/GetTaxonomyList/" $.getJSO
大家好,我正在尝试将我的商店导入我的 Vuex Route-Gard。 路由器/auth-guard.js import {store} from '../store' export default
我正在使用 C# 控制台应用程序 (.NET Core 3.1) 从 Azure Blob 存储读取大量图像文件并生成这些图像的缩略图。新图像将保存回 Azure,并将 Blob ID 存储在我们的数
我想将 Mlflow 设置为具有以下组件: 后端存储(本地):在本地使用 SQLite 数据库存储 Mlflow 实体(run_id、params、metrics...) 工件存储(远程):使用 Az
我正在使用 C# 控制台应用程序 (.NET Core 3.1) 从 Azure Blob 存储读取大量图像文件并生成这些图像的缩略图。新图像将保存回 Azure,并将 Blob ID 存储在我们的数
我想将 Mlflow 设置为具有以下组件: 后端存储(本地):在本地使用 SQLite 数据库存储 Mlflow 实体(run_id、params、metrics...) 工件存储(远程):使用 Az
我的 Windows 计算机上的本地文件夹中有一些图像。我想将所有图像上传到同一容器中的同一 blob。 我知道如何使用 Azure Storage SDKs 上传单个文件BlockBlobServi
我尝试发出 GET 请求来获取我的 Azure Blob 存储帐户的帐户详细信息,但每次都显示身份验证失败。谁能判断形成的 header 或签名字符串是否正确或是否存在其他问题? 代码如下: cons
这是用于编写 JSON 的 NeutralinoJS 存储 API。是否可以更新 JSON 文件(推送数据),而不仅仅是用新的 JS 对象覆盖数据。怎么做到的??? // Javascript
我有一个并行阶段设置,想知道是否可以在嵌套阶段之前运行脚本,所以像这样: stage('E2E-PR-CYPRESS') { when { allOf {
我想从命令行而不是从GUI列出VirtualBox VM的详细信息。我对存储细节特别感兴趣。 当我在GUI中单击VM时,可以看到包括存储部分在内的详细信息: 但是到目前为止,我还没有找到通过命令行执行
我有大约 3500 个防洪设施,我想将它们表示为一个网络来确定流动路径(本质上是一个有向图)。我目前正在使用 SqlServer 和 CTE 来递归检查所有节点及其上游组件,只要上游路径没有 fork
谁能告诉我 jquery data() 在哪里存储数据以及何时删除以及如何删除? 如果我用它来存储ajax调用结果,会有性能问题吗? 例如: $("body").data("test", { myDa
有人可以建议如何为 Firebase 存储中的文件设置备份。我能够备份数据库,但不确定如何为 firebase 存储中的文件(我有图像)设置定期备份。 最佳答案 如何进行 Firebase 存储的本地
我最近开始使用 firebase 存储和 firebase 功能。现在我一直在开发从功能到存储的文件上传。 我已经让它工作了(上传完成并且文件出现在存储部分),但是,图像永远保持这样(永远在右侧加载)
我想只允许用户将文件上传到他们自己的存储桶中,最大文件大小为 1MB,仍然允许他们删除文件。我添加了以下内容: match /myusers/{userId}/{allPaths=**} { al
使用生命周期管理策略将容器的内容从冷访问层移动到存档。我正在尝试以下策略,希望它能在一天后将该容器中的所有文件移动到存档层,但事实并非如此在职的。我设置了选择标准“一天未使用后”。 这是 json 代
对于连接到 Azure 存储端点,有 http 和 https 两个选项。 第一。 https 会带来开销,可能是 5%-10%,但我不支付同一个数据中心的费用。 第二。 http 更快,但 Auth
有人可以帮我理解这一点吗?我创建了Virtual Machine in Azure running Windows Server 2012 。我注意到 Azure 自动创建了一个存储帐户。当我进入该存
我是一名优秀的程序员,十分优秀!