小编Nat*_*ell的帖子

html文档中元数据的最佳实践?

我从事大规模,大批量,面向公众的Web应用程序.应用程序的成功运行对业务非常重要,因此有许多MI工具可以针对它运行.

其中一个MI工具实际上是查看每个页面请求发送到浏览器的html(我已经对它进行了很多简化,但是出于这个问题的目的,它是一个对html进行一些分析的工具)

对于这个MI工具来获取它需要的数据,我们将元数据放在head元素中.目前我们以html评论的方式做到:

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="">
<head>
    <!-- details = 52:AS6[rxSdsMd4RgYXJgeabsRAVBZ:0406139009] -->
    <!-- policy id = 1234567890 -->
    <!-- party id = 0987654321 -->
    <!-- email address = user@email.com -->
    <!-- error = 49 -->
    <!-- subsessionid = bffd5bc0-a03e-42e5-a531-50529dae57e3-->
    ...
Run Code Online (Sandbox Code Playgroud)

该工具只需使用正则表达式查找给定的元数据注释

由于这些数据是元数据,我想将其更改为html元标记,因为它在语义上是正确的.像这样的东西:

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="">
<head>
    <meta name="details" content="52:AS6[rxSdsMd4RgYXJgeabsRAVBZ:0406139009]" />
    <meta name="policyId" content="1234567890" />
    <meta name="partyId" content="0987654321" />
    <meta name="emailAddress" content="user@email.com" />
    <meta name="error" content="49" />
    <meta name="subsessionid" content="bffd5bc0-a03e-42e5-a531-50529dae57e3" />
    ...
Run Code Online (Sandbox Code Playgroud)

这感觉更加语义,我可以让MI工具使用它没有问题 …

html html5 w3c-validation meta-tags

69
推荐指数
2
解决办法
2万
查看次数

如何将参数或参数传递给gradle任务

我有一个gradle构建脚本,我试图包含Eric Wendelin的css插件 - http://eriwen.github.io/gradle-css-plugin/

它很容易实现,因为我只想缩小(而不是组合和gzipping),我已经得到了构建脚本的相关部分,如下所示:

minifyCss {
    source = "src/main/webapp/css/brandA/styles.css"
    dest = "${buildDir}/brandA/styles.css"
    yuicompressor {
        lineBreakPos = -1
    }
}

war {
    baseName = 'ex-ren'
}

war.doFirst {
    tasks.myTask.minifyCss.execute()
}
Run Code Online (Sandbox Code Playgroud)

这很完美 - 当我运行gradle war任务时,它调用minifyCss任务,获取源css文件,并在buildDir中创建一个缩小版本

但是,我有一些css文件需要缩小,但不能合并到一个文件中(因此我没有使用combineCss任务)

我希望能够做的是使用某种类型的minifyCss任务引用变量的源和目标属性(假设这是正确的术语吗?) - 传递给签名中的任务的变量,或全局变量,或者东西......

我觉得这样的东西(这不起作用):

minifyCss(sourceFile, destFile) {
    source = sourceFile
    dest = destFile
    yuicompressor {
        lineBreakPos = -1
    }
}

war {
    baseName = 'ex-ren'
}

war.doFirst {
    tasks.myTask.minifyCss.execute("src/main/webapp/css/brandA/styles.css", "${buildDir}/brandA/styles.css")
    tasks.myTask.minifyCss.execute("src/main/webapp/css/brandB/styles.css", "${buildDir}/brandB/styles.css")
    tasks.myTask.minifyCss.execute("src/main/webapp/css/brandC/styles.css", "${buildDir}/brandC/styles.css")
}
Run Code Online (Sandbox Code Playgroud)

这也不起作用:

def sourceFile = null
def destFile = null

minifyCss …
Run Code Online (Sandbox Code Playgroud)

variables parameters groovy gradle

42
推荐指数
6
解决办法
9万
查看次数

getUserMedia - 如何检测设备是否确实有摄像头

我正在使用html5/javascript getUserMedia api编写一个js应用程序,如果可用的话,它将使用设备的相机.我正在使用Modernizr来检测(浏览器的)功能,如下所示:

if (Modernizr.getusermedia) {
Run Code Online (Sandbox Code Playgroud)

并在真正的块内:

navigator.getUserMedia(
    {   // we would like to use video but not audio
        // This object is browser API specific! - some implementations require boolean properties, others require strings!
        video: true, 
        audio: false
    },
    function(videoStream) {
        // 'success' callback - user has given permission to use the camera
        // my code to use the camera here ... 
    },
    function() {
        // 'no permission' call back
        console.log("user did not give access to the camera");
    } …
Run Code Online (Sandbox Code Playgroud)

javascript camera modernizr

13
推荐指数
2
解决办法
1万
查看次数

如何控制Spring Hateoas生成链接的Web上下文?

我们正在构建API并使用Spring RestControllers和Spring HATEOAS.
将war文件部署到容器并发出GET请求时http://localhost:8080/placesapi-packaged-war-1.0.0-SNAPSHOT/places,HATEOAS链接如下所示:

{
  "links" : [ {
    "rel" : "self",
    "href" : "http://localhost:8080/placesapi-packaged-war-1.0.0-SNAPSHOT/places",
    "lastModified" : "292269055-12-02T16:47:04Z"
  } ]
}
Run Code Online (Sandbox Code Playgroud)

在网络方面是,部署的应用程序(如:placesapi-packaged-war-1.0.0-SNAPSHOT)

在真实的运行时环境(UAT及更高版本)中,容器可能位于http服务器后面,例如Apache虚拟主机或类似的Web应用程序.像这样的东西:

<VirtualHost Nathans-MacBook-Pro.local>
   ServerName Nathans-MacBook-Pro.local

   <Proxy *>
     AddDefaultCharset Off
     Order deny,allow
     Allow from all
   </Proxy>

   ProxyPass / ajp://localhost:8009/placesapi-packaged-war-1.0.0-SNAPSHOT/
   ProxyPassReverse / ajp://localhost:8009/placesapi-packaged-war-1.0.0-SNAPSHOT/

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

使用上面的内容,当我们发出GET请求时http://nathans-macbook-pro.local/places,结果响应如下所示:

{
  "links": [ {
    "rel": "self",
    "href": "http://nathans-macbook-pro.local/placesapi-packaged-war-1.0.0-SNAPSHOT/places",
    "lastModified": "292269055-12-02T16:47:04Z"
  } ]
}
Run Code Online (Sandbox Code Playgroud)

这是错误的,因为响应中的链接包含Web应用程序上下文,如果客户端要关注该链接,他们将获得404

有谁知道如何控制Spring HATEOAS这方面的行为?基本上我需要能够控制它在链接中生成的Web上下文名称.

我做了一些调整,可以看到使用自定义标头,X-Forwarded-Host您可以控制主机和端口,但我看不到任何类似的能够控制上下文.

我们考虑的其他选项涉及将应用程序部署到ROOT上下文或固定的命名上下文,然后相应地设置我们的虚拟主机.然而,这些感觉就像妥协而不是解决方案,因为理想情况下我们希望在同一容器上托管应用程序的多个版本(例如:placesapi-packaged-war-1.0.0-RELEASE,placesapi-packaged-war-1.0.1- RELEASE,placesapi-packaged-war-2.0.0-RELEASE等)并根据http请求标头将虚拟主机转发到正确的应用程序. …

spring webcontext spring-hateoas

12
推荐指数
1
解决办法
2816
查看次数

UINavigationBar可编辑的标题?

我有一个基于UINavigationController的应用程序.我可以在我的视图控制器的viewDidLoad方法中以编程方式设置UINavigationBar的标题:

self.navigationItem.title = m_name;
Run Code Online (Sandbox Code Playgroud)

我可以这样做,以便导航栏中的标题是可编辑的吗?IE浏览器.我希望用户能够点击导航栏中的标题,并能够编辑它.

这可能吗?如果有可能,它是否可能符合Apple的人机界面指南?(这篇文章暗示它会,但不会告诉我如何实现它 - 让UINavigationBar标题可编辑)

非常感谢

弥敦道

objective-c uinavigationbar ios

11
推荐指数
2
解决办法
4601
查看次数

如何让java.util.logging发送日志到Logback?

我正在开发一个使用slf4j api记录的应用程序:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

...

private static final Logger LOG = LoggerFactory.getLogger(FreemarkerEmailPreviewGenerator.class);

...

LOG.error("Error generating email preview", e);
Run Code Online (Sandbox Code Playgroud)

(上面的代码贴出来显示正在使用的类和包,但非常标准的东西.)

我们使用如下配置的logback:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%d{HH:mm:ss.SSS}] [%thread] [%-5level %logger{26} - %msg]%n
            </pattern>
        </encoder>
    </appender>

    <root>
        <level value="debug" />
        <appender-ref ref="STDOUT" />
    </root>

</configuration>
Run Code Online (Sandbox Code Playgroud)

我们的一些代码使用了使用java.util.logging记录的第三方库 - 特别是freemarker.从下面的控制台日志条目中可以看出,logback和jul都记录到控制台,但它们没有使用相同的配置(使用我们的模式的logback条目,jul不使用)

[12:24:38.842] [pool-2-thread-19] [INFO  u.o.n.r.l.s.e.t.TemplateLoaderFromService - Finding template workflow/mail/templates/common/workflow-macros.ftl]
[12:24:38.859] [pool-2-thread-19] [INFO  u.o.n.r.l.s.e.t.TemplateLoaderFromService - Loaded template workflow/mail/templates/common/workflow-macros.ftl as /workflow/mail/templates/common/workflow-macros.ftl from RegistryMailTemplateService.]
11-Jan-2017 12:24:38 freemarker.log.JDK14LoggerFactory$JDK14Logger error
SEVERE:

Expression domainContact is undefined …
Run Code Online (Sandbox Code Playgroud)

java logback java.util.logging

8
推荐指数
1
解决办法
5710
查看次数

mvn release 使用特定的私钥推送到 git

我希望有人可以帮助解决这个问题。我正在尝试配置mvn release插件,pom.xml以便将更新的 pom 版本和标签作为release:prepare. 至关重要的是,它需要使用特定用户的 ssh 私钥,因为最终这将成为我们 CI 堆栈的一部分。

pom.xml我目前有一个非常简单的发布插件配置:

<build>
    <plugins>
        <!-- release plugin -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>2.5.3</version>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

scmpom 中的设置如下所示:

<scm>
    <connection>scm:git:git://ssh@bitbucket.org/**account**/**project**.git</connection>
    <developerConnection>scm:git:ssh://git@bitbucket.org/**account**/**project**.git</developerConnection>
    <url>https://bitbucket.org/**account**/**project**</url>
</scm>
Run Code Online (Sandbox Code Playgroud)

我在 pom 中有以下属性(虽然不确定是否使用了它 - 我在一个松散相关的问题上找到了它的参考):

<properties>
    <project.scm.id>bitbucket.org</project.scm.id>
Run Code Online (Sandbox Code Playgroud)

最后,我在 mvn 中有以下内容settings.xml

<servers>
    <server>
        <id>bitbucket.org</id>
        <privateKey>~/.ssh/bitbucket-read-write-access</privateKey>
        <passphrase></passphrase>
    </server>
Run Code Online (Sandbox Code Playgroud)

私钥文件~/.ssh/bitbucket-read-write-access存在,该文件夹中没有其他密钥(我特意去掉了默认的id_rsa

当我运行时mvn release:perform,它在尝试推送到存储库时失败:

[INFO] Executing: /bin/sh -c cd /home/nathanrussell/projects/**project** && git push ssh:********@bitbucket.org/**account**/**project**.git refs/heads/master:refs/heads/master
[INFO] Working directory: …
Run Code Online (Sandbox Code Playgroud)

git ssh maven

6
推荐指数
1
解决办法
3926
查看次数

我可以在Spring MVC控制器中获取当前的Webflow状态吗?

从表面上看,有点奇怪的问题!但我正在创建一个使用webflow和传统Spring MVC控制器的Web应用程序.

从其中一个Webflow视图中,http请求(ajax)从客户端发送到spring控制器.当它最初被编码时,它与webflow没有很多逻辑连接,但现在事情已经开始,控制器可以真正知道请求来自哪个屏幕(视图状态).

我的控制器方法签名如下所示:

@RequestMapping(value="/AjaxStuff", method=RequestMethod.POST)
public String ajaxStuff(@ModelAttribute("quote") QB2MotorQuote p_quote, BindingResult p_bindingResult, 
        HttpServletRequest p_req, Model p_model, DefaultMessageContext p_messages) {
Run Code Online (Sandbox Code Playgroud)

我从一些webflow动作类中了解到,我可以从RequestContext对象获取当前状态:

public Event checkDeclines(RequestContext p_ctx) throws Exception {
    // get the current state
    StateDefinition state = p_ctx.getCurrentState();
Run Code Online (Sandbox Code Playgroud)

我从来没有真正理解Spring所做的'voodoo':)只需在方法签名上指定它们就可以自动注入参数(当然它只能注入它知道的东西??).我试过简单地改变我的控制器方法的方法签名来注入RequestContext(徒劳地希望它会被注入),但事实并非如此.它抱怨RequestContext是一个接口.

所以,有没有人知道如何让我的控制器知道当前的webflow状态 - 通过注入控制器方法签名中的东西,或者我可以从某种方式从http请求中获取它(或者我可以从请求获得的会话) ).

任何帮助都非常感谢.

java spring spring-mvc spring-webflow-2

4
推荐指数
1
解决办法
4742
查看次数

Thymeleaf 可以访问 Spring servletContext 吗?

我想知道是否有人可以帮忙。我们正在将 Spring Webflow 2 应用程序从使用基于 jsp 的视图层转换为基于 Thymeleaf 的视图。

对于这大部分来说,这是可以的,但现在我正在努力让 Thymeleaf 访问我们放入servletContext.

因此,我们有一个对象被放入servletContextbean 的一部分(实现ServletContextAwareInitializingBean

为了简单起见,我们假设它是一个字符串:

public class ReferenceDataBuilder implements ServletContextAware, InitializingBean {

public void setServletContext(ServletContext p_context) {
    p_context.setAttribute("referenceData", "test text" );
}
Run Code Online (Sandbox Code Playgroud)

在基于 jsp 的视图中,我们可以referenceData像这样访问对象:

<p><c:out value="${referenceData}"/></p>
Run Code Online (Sandbox Code Playgroud)

借助 Spring EL 的魔力,它知道它可以访问的各种范围(servletContext、等),并且(我猜? flowScopeflashScope搜索每个范围,直到找到匹配的属性。结果是:

<p>test text</p>
Run Code Online (Sandbox Code Playgroud)

在视图中呈现。

在我们的 thymeleaf 模板中,我们尝试做同样的事情:

<p th:text="${referenceData}"/></p>
Run Code Online (Sandbox Code Playgroud)

但这只是返回一个空字符串。该视图呈现一个空字符串:

<p></p>
Run Code Online (Sandbox Code Playgroud)

(但我认为 EL 实际上是作为 null 返回的)

我非常确定,如果该referenceData对象是诸如flowScope或 之类的范围的属性flashScope,那么这将起作用 …

spring-webflow-2 thymeleaf

2
推荐指数
1
解决办法
5454
查看次数

我可以混合使用JUnit 3和JUnit 4吗?

我正在编写一些JUnit测试,它们从第三方库扩展了一个类.超类扩展TestCase,所以根据定义,我的子类也是如此.

在我的子类中,我用前缀编写测试方法,test然后执行这些方法.

但是,出于多种原因,我们希望转移到JUnit 4(其中一个原因是我们不希望将测试方法作为前缀test)

我尝试使用JUnit 4 @Test注释编写新测试,但这些方法不会被执行.
例如:

public abstract class UtilityClassFromThirdPartyLibrary extends TestCase {

}

public class MyTestClass extends UtilityClassFromThirdPartyLibrary {

    public void testThisMethodIsInvokedBecauseItStartsWithTest {
    }

    @Test
    public void thisMethodDoesNotGetInvoked {
    }
}
Run Code Online (Sandbox Code Playgroud)

不扩展第三方测试类不是一种选择.(对于它的价值,它是Spring,它AbstractXmlFlowExecutionTests反过来扩展了其他Spring类,最终扩展TestCase.超类中的方法提供了如此多的设置和样板,没有扩展它们只是为了使用JUnit 4会适得其反)

如上所述,我们使用JUnit 4 @Test注释的动机之一是它允许我们更好地命名我们的方法.我们的观点是这个词test是多余的,因为该类显然是一个测试类,并且该方法带有注释@Test.我们以BDD样式编写测试,因此我们的测试方法名称描述了被测单元应该做什么 - 我们的命名约定是public void shouldDoSomething()

有没有人知道是否有可能混合' TestCase使用JUnit 4的方法扩展JUnit 3的''匹配测试类@Test?如果是这样,怎么样?

谢谢
内森


我已经看到了几个与问题相关的SO问题,但它们与Android或测试套件有关,因此与我的问题不完全相同.EG:
可以混合JUnit3和JUnit4吗?
/sf/ask/2267533131/

java junit4 junit3

0
推荐指数
1
解决办法
846
查看次数

JPA EntityManager:“find”与“createQuery”和“getResultList”

我正在处理使用 JPA(不是 JPA-2)的遗留代码库,并且在 DAO 实现类中遇到了以下方法来通过 ID(这也是它的主键)检索单个实体:

public EmailTemplate findEmailTemplateById(long id) {

    LOG.debug("Entering findEmailTemplateById(id='" + id + "')");
    // Construct JPQL query       
    String queryString = "SELECT a FROM EmailTemplate a " +
            "WHERE templateId = :templateId";
    Query query = entityManager.createQuery(queryString);

    query.setParameter("templateId", id);

    LOG.debug("Using query " + queryString);

    List<EmailTemplate> resultList = query.getResultList();

    LOG.debug("Exiting findEmailTemplateByName(id='" + id + "') results size " + resultList.size() + " ( returns null if 0 )");

    if (resultList.isEmpty() || resultList.size() == 0) {
        return null;
    } else …
Run Code Online (Sandbox Code Playgroud)

java entity-framework hibernate jpa

0
推荐指数
1
解决办法
5394
查看次数