小编nul*_*ull的帖子

如何改进从Play框架2.x中的JsError.toFlatJson或JsError.toJson返回的错误消息可读性?

我有一个使用scala构建的带有Play框架v2.3的JSON REST API服务器,我有这样的控制器动作,例如:

  def register = Action.async(BodyParsers.parse.json) { implicit request => 
      request.body.validate[Register].fold(
        errors => Future.successful(BadRequest(JsError.toFlatJson(errors))),
        register => {
            // do something here if no error...
          }
      )
    }
Run Code Online (Sandbox Code Playgroud)

为简单起见,我处理了验证错误JsError.toFlatJson(注意:JsError.toFlatJson在较新的Play中不推荐使用,替换是JsError.toJson).

问题是json结果有如下隐秘的消息:

{"obj.person.email":[{"msg":"error.email","args":[]}]}

以上json表示该人的电子邮件无效.

有没有办法将错误json结果转换为更可读的消息?

我不希望客户端应用程序应该做的映射/转换obj.person.emailerror.email.我更喜欢服务器在将json返回到客户端应用程序之前执行此操作.

json scala playframework playframework-2.0

9
推荐指数
1
解决办法
724
查看次数

如何在Play framework 2.3.x(Scala)中将POJO转换为JSON?

任何人都可以告诉我如何使用Scala将POJO或类实例转换为Play框架中的JSON(特别是Play v2.3.x)?

例如,我有这样的代码:

case class Foo(name: String, address: String)

def index = Action {
      request => {
        val foo = Foo("John Derp", "Jem Street 21")  // I want to convert this object to JSON
        Ok(Json.toJson(foo))    // I got error at here
      }
}
Run Code Online (Sandbox Code Playgroud)

错误消息:

无法将com.fasterxml.jackson.data bind.JsonNode的实例写入HTTP响应.尝试定义一个可写的[com.fasterxml.jackson.databind.JsonNode]

更新:我发现上面的错误是由于错误导入Json类引起的,应该是:import play.api.libs.json.Json.但是我仍然在下面的隐含问题上有错误.

我已经阅读了本教程,但是当我尝试隐式Writes[Foo]代码时:

  implicit val fooWrites: Writes[Foo] = (
        (JsPath \ "name").write[String] and
            (JsPath \ "address").write[String]
        )(unlift(Foo.unapply))
Run Code Online (Sandbox Code Playgroud)

Can't resolve symbol andCan't resolve …

json scala playframework playframework-2.0

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

Struts2:<s:submit>按钮中的方法属性不起作用

我在jsp中有一个表单.有两个提交按钮:"搜索"和"添加新"按钮.我已经为每个按钮设置了自己的方法属性.

<s:form name="searchForm" action="employeeAction" method="post">
    <s:textfield name="id" label="Employee ID"/>
    <s:textfield name="name" label="Employee Name"/>

    <s:submit value="Search" method="doSearch"/>
    <s:submit value="Add New" method="doAddNew"/>
</s:form>
Run Code Online (Sandbox Code Playgroud)

在struts.xml中

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />

    <package name="default" namespace="/" extends="struts-default">

        <default-action-ref name="index" />

        <global-results>
            <result name="error">/error.jsp</result>
        </global-results>

        <global-exception-mappings>
            <exception-mapping exception="java.lang.Exception" result="error"/>
        </global-exception-mappings>

    </package>

    <package name="example" namespace="/example" extends="default">

        <action name="employeeAction" class="example.EmployeeAction">
           <result name="search">/example/search.jsp</result>
           <result name="add">/example/add.jsp</result>
        </action>

    </package>
</struts>
Run Code Online (Sandbox Code Playgroud)

在EmployeeAction类中

public class EmployeeAction …
Run Code Online (Sandbox Code Playgroud)

java jsp struts2 submit-button struts-action

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

如何在单个Action类中检测单击多个提交按钮场景中的提交按钮?

我在jsp中有一个表单.有两个提交按钮:"搜索"和"添加新"按钮.

<s:form name="searchForm" action="employeeAction" method="post">
    <s:textfield name="id" label="Employee ID"/>
    <s:textfield name="name" label="Employee Name"/>

    <s:submit value="Search"/>
    <s:submit value="Add New"/>
</s:form>
Run Code Online (Sandbox Code Playgroud)

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />

    <package name="default" namespace="/" extends="struts-default">

        <default-action-ref name="index" />

        <global-results>
            <result name="error">/error.jsp</result>
        </global-results>

        <global-exception-mappings>
            <exception-mapping exception="java.lang.Exception" result="error"/>
        </global-exception-mappings>

    </package>

    <package name="example" namespace="/example" extends="default">

        <action name="employeeAction" class="example.EmployeeAction">
           <result name="search">/example/search.jsp</result>
           <result name="add" type="redirect">/example/add.jsp</result>
        </action>

    </package>
</struts>
Run Code Online (Sandbox Code Playgroud)

在Struts Action类中,我们知道只有一种方法可以处理http请求,即execute()方法. …

java action struts2 submit-button

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

如何选择所有子文本但使用Scapy的XPath排除标记?

我有这个HTML:

<div id="content">
    <h1>Title 1</h1><br><br>

    <h2>Sub-Title 1</h2>
    <br><br>
    Description 1.<br><br>Description 2.
    <br><br>

    <h2>Sub-Title 2</h2>
    <br><br>
    Description 1<br>Description 2<br>
    <br><br>

    <div class="infobox">
        <font style="color:#000000"><b>Information Title</b></font>
        <br><br>Long Information Text
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我希望<div id="content">在Scrapy 中使用XPath 获取所有文本,但不包括<div class="infobox">内容,因此预期结果如下:

Title 1


Sub-Title 1


Descripton 1.

Descripton 2.


Sub-Title 2


Descripton 1.
Descripton 2.
Run Code Online (Sandbox Code Playgroud)

但是我还没有到达排除部分,我仍然在努力从中获取文本<div id="content">.

我试过这个:

response.xpath('//*[@id="content"]/text()').extract()
Run Code Online (Sandbox Code Playgroud)

但它只返回Description 1.Description 2.从两个子标题返回.

然后我尝试了:

response.xpath('//*[@id="content"]//*/text()').extract()
Run Code Online (Sandbox Code Playgroud)

它只返回Title 1,Sub-Title 1,Sub-Title 2,Information Title,和 …

html python xpath scrapy

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

这些scala方法中下划线用法之间的差异

这些代码中这些下划线用法之间有什么区别和术语名称:(参见handler(resource)部分)

1.

def readFile[T](f: File)(handler: FileInputStream => Byte => T): T = {
    val resource = new java.io.FileInputStream(f)
    try {
        val hh = handler(resource)_
        hh(2)
    } finally {
        resource.close()
    }
}

val bs = new Array[Byte](4)

readFile(new File("scala.txt")) {
    input => b: Byte => println("Read: " + (input.read(bs) + b))
}
Run Code Online (Sandbox Code Playgroud)

我收到编译错误:

Error:(55, 29) _ must follow method; cannot follow Byte => T
            val hh = handler(resource)_
                        ^
Run Code Online (Sandbox Code Playgroud)

这是什么意思?

2.

def readFile[T](f: File)(handler: FileInputStream => Byte => T): …
Run Code Online (Sandbox Code Playgroud)

functional-programming scala

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

如何从android XML中的<string-array>资源访问<item>?

我有一个用于PreferenceActivity的xml文件(/res/xml/setting.xml):

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
        <PreferenceCategory android:title="Main Settings">
            <ListPreference
                android:title="Background Image"
                android:summary="Set the background image"
                android:key="key_background"
                android:entries="@array/background"
                android:entryValues="@array/background_values" 
                android:defaultValue="winter.png" /> 
        </PreferenceCategory>
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)

然后我有另一个xml文件"/res/values/string.xml":

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string-array name="background">
        <item>Winter</item>
        <item>Desert</item>
    </string-array>

    <string-array name="background_values">
        <item>winter.png</item>
        <item>desert.png</item>
    </string-array>

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

请参阅setting.xml中的ListPreference,我想android:defaultValue设置为winter.png.但是我也不想在xml中设置硬编码/常量值,所以我尝试了各种值,如" @array/background_values/0"," @array/background_values[0]"等...但都失败了.

所以,问题是:

  1. 访问其他xml中的字符串数组资源项的正确语法是什么?
  2. 如何确定它android:defaultValue是否正常工作?
  3. 有没有关于@array语法的文档?我找不到任何东西.

xml android

5
推荐指数
1
解决办法
8234
查看次数

如何在 Open GL 中创建连续重复滚动的背景图像?

我有一张图片:background.png。如何使用 android OpenGL ES 或 AndEngine 库或您知道的其他技术创建连续重复滚动的背景图像?

例子:
移动云

目前,我使用两个相邻图像技术。我加载图像(background.png)两次并将它们相邻放置,然后移动它们。所以它看起来就像是一张连续滚动的图像。

但是,不知何故,我认为仅使用一个图像实例可能会有更好的解决方案。有谁可以分享一下吗?

更新
对于好奇的人来说,这是两个相邻图像的代码(使用 AndEngine 库):

movingBackgroundSprite.registerEntityModifier(new LoopEntityModifier(
    new MoveYModifier(10, -CAMERA_HEIGHT, 0)));     
movingBackgroundSprite2.registerEntityModifier(new LoopEntityModifier(
    new MoveYModifier(10, 0, CAMERA_HEIGHT)));
Run Code Online (Sandbox Code Playgroud)

上面的代码是关于重复制作背景图像并从上到下垂直滚动。

注意:
* movingBackgroundSprite 是加载background.png 图像的Sprite 类。您可以看到背景精灵有两个实例。
* registerEntityModifier -> 为 Sprite 应用修改器/行为
* LoopEntityModifier -> 循环行为
* MoveYModifier -> 按 y 位置移动行为。第一个参数是持续时间(您可以忽略它,因为它与问题无关),第二个参数是源 Y 位置,第三个参数是目标 Y 位置。
* CAMERA_HEIGHT -> 定义背景图像高度的常量。

android opengl-es graphic

5
推荐指数
1
解决办法
5386
查看次数

是否可以将方法参数传递给方法上的注释?

假设我们有这个带注释的方法:

@Cached(key="search" + id)
public static List<String> search(String id) {
    //...
}
Run Code Online (Sandbox Code Playgroud)

我想将参数“id”传递给 @Cached 注释的键。

可以在java中做到这一点吗?

java annotations

5
推荐指数
1
解决办法
6465
查看次数

如何解决Scala中采用相同输入类型的歧义隐式转换方法?

我在这里阅读了其他相同的问题,但是对于某些内置类来说,这种情况太具体了。我想在这里问一个简单的案例,希望能得到一般的答案。

所以我有这段代码:

object ScalaApp {    
    case class Point(x: Int, y: Int);

    case class Rational(n: Int, d: Int) {
        def \(i: Int): List[Int] = n :: d:: i :: Nil
    }

    case class MyObject(x: Int, y: Int, z: Int) {
        def \(i: Int): List[Int] = x :: y:: i :: Nil
    }

    implicit def pointToRational(p: Point): Rational = Rational(p.x + 1, p.y * 2)

    implicit def pointToMyObject(p: Point): MyObject = MyObject(p.x, p.y, p.x+p.y)

    def main(args: Array[String]) {
        val p …
Run Code Online (Sandbox Code Playgroud)

scala implicit-conversion

5
推荐指数
1
解决办法
2384
查看次数